2016-08-26 110 views
0

VBScriptを使用してピボットテーブルを作成しようとしています。私はそれに近いと思いますが、レポートフィルタを作成して "内部"のフィルタを設定する方法や、値にcountの代わりにsumを使用する方法はわかりません。VBScriptでピボットテーブルを作成する

xlA1 = 1 
xlDatabase = 1 
xlRowField = 1 
xlColumnField = 2 
xlFilterField = 3 

Set xlBook1 = objExcel.WorkBooks.Open(ws_path & "FINAL.xlsx") 
set rngData =xlBook1.Sheets("NONPO").Usedrange 
set rngReport = xlBook1.Sheets("NONPO").Range("CE1") 

set pvtCache = xlBook1.pivotCaches.add(xlDatabase, rngData.address(true, true, xlA1, true)) 
set pvtTable = pvtCache.createPivotTable(rngReport, "Pivot1") 

pvtTable.pivotFields("Date").orientation =xlRowField 
pvtTable.pivotFields("Country Code").orientation = xlColumnField 
pvtTable.pivotFields("Agent Type").orientation = xlFilterField 
'*****Here I should Use filter as "Internal"***** 

pvtTable.pivotFields("Hours").orientation = xlsum *****xlsum is not working***** 

答えて

0

私は、これはあなたが望むものであると信じて:私が今持っているものである

pt.AddDataField(pt.PivotFields("Hours"), "Hours", _ 
    Excel.XlConsolidationFunction.xlSum) 

だから、全体的にはこのように見えるはずです(具体的なニーズに合わせて変更する必要があります)。

Private Sub CreatePivotTable(tableName As String) 
    Dim targetSheet As Excel.Worksheet = ExcelApp.Sheets.Add 
    Dim ptName As String = "MyPivotTable" 

    'We'll assume the passed table name exists in the ActiveWorkbook 
    targetSheet.PivotTableWizard(Excel.XlPivotTableSourceType.xlDatabase, _ 
     tableName, targetSheet.Range("A5")) 
    targetSheet.Select() 

    Dim pt As Excel.PivotTable = targetSheet.PivotTables(1) 

    'To be professional or merely resuable, the name could be passed as parameter 
    With pt.PivotFields("Order Date") 
     .Orientation = Excel.XlPivotFieldOrientation.xlRowField 
     .Position = 1 
    End With 

    pt.AddDataField(pt.PivotFields("Order Total"), "Order Count", _ 
     Excel.XlConsolidationFunction.xlCount) 
    pt.AddDataField(pt.PivotFields("Order Total"), "Total for Date", _ 
     Excel.XlConsolidationFunction.xlSum) 

    '--OR-- 
    'AddPivotFields(pt, "Order Total", "Order Count", _ 
    ' Excel.XlConsolidationFunction.xlCount) 
    'AddPivotFields(pt, "Order Total", "Total For Date", _ 
    ' Excel.XlConsolidationFunction.xlSum) 

    Marshal.ReleaseComObject(pt) 
    Marshal.ReleaseComObject(targetSheet) 
End Sub 
0

は次のように動作するはずです...

With pvtTable.pivotFields("Hours") 
    .orientation = 4 
    .Function = xlSum 
    End With 
+1

は、いくつかの限定された、すぐに助けを提供するかもしれない、このコードスニペット、ありがとう。 A [適切な説明](https://meta.stackexchange.com/q/114762/349538)は、これが問題の良い解決策である理由を示すことによって、 の長期的な価値を大幅に改善し、 をより有用にするでしょう他の同様の質問を持つ将来の読者にあなたの回答を [編集]して、あなたが行った前提を含むいくつかの説明を加えてください。 –

関連する問題