web-dev-qa-db-ja.com

ExcelはVBAによってピボットテーブルを作成します

VBAで簡単なピボットテーブルを作成しています。私のコードの何が問題なのかわかりません。コードはエラーなしで実行されますが、結果は異なります。私のコードのどこに問題があるのか​​教えてください。

Sub CreatePivotTable()

Dim sht As Worksheet
Dim pvtCache As PivotCache
Dim pvt As PivotTable
Dim StartPvt As String
Dim SrcData As String

'Determine the data range you want to pivot
  SrcData = ActiveSheet.Name & "!" & Range("A1:B53821").Address(ReferenceStyle:=xlR1C1)

'Create a new worksheet
  Set sht = Sheets.Add

'Where do you want Pivot Table to start?
  StartPvt = sht.Name & "!" & sht.Range("A1").Address(ReferenceStyle:=xlR1C1)

'Create Pivot Cache from Source Data
  Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)

'Create Pivot table from Pivot Cache
  Set pvt = pvtCache.CreatePivotTable(TableDestination:=StartPvt, TableName:="PivotTable1")


pvt.PivotFields("Module").Orientation = xlRowField
pvt.PivotFields("KW").Orientation = xlColumnField

pvt.AddDataField pvt.PivotFields("Module"), "Anzahl von Module", xlCount

pvt.PivotFields("Module").PivotFilters.Add Type:=xlTopCount, DataField:=pvt.PivotFields("Anzahl von Module"), Value1:=12

End Sub

手動で行う場合、これは私が得る結果であり、これは最後に欲しいものです。

enter image description here

私のコードは私にこの結果を与えます。それは間違っています。

enter image description here

5
Shan

あなたの問題は、2つの列(A、B)と最後のコード行だけの小さな初期範囲にあると思います

'Determine the data range you want to pivot
  SrcData = ActiveSheet.Name & "!" & Range("A1:B53821").Address(ReferenceStyle:=xlR1C1)

列Aに名前があり、Moduleを呼び出し、列Bが数字のKW(モジュールのKW/h)であるとします

'Create Pivot table from Pivot Cache
Set pvt = pvtCache.CreatePivotTable(TableDestination:=StartPvt, TableName:="PivotTableTest")

pvt.AddDataField pvt.PivotFields("Module"), "Num Module", xlCount
pvt.PivotFields("Module").Orientation = xlColumnField ' not xlRowField
pvt.PivotFields("KW").Orientation = xlRowField ' not xlColumnField

最後の行は必要ありません。

1
Pedro Polonia

XlRowFieldとxlColumnFieldを追加してみてください計算フィールドを追加しました。

例えば.

最初

pvt.AddDataField pvt.PivotFields("Module"), "Anzahl von Module", xlCount

それから

pvt.PivotFields("Module").Orientation = xlRowField
pvt.PivotFields("KW").Orientation = xlColumnField
0
macstoll