- ベストアンサー
マクロでピボットテーブルを作成したい
こんばんは。マクロの自動記録を使って、ピボットテーブルを作成したのですが、記録した時のシート名とデータ範囲で記録されてしまいます。アクティブシートのデータがある範囲をピボットテーブルにしたい時は、どうすれば良いでしょうか? 以下のコードが自動記録で作成したコードです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "シート名!R1C1:R1000C30").CreatePivotTable TableDestination:= _ "", TableName:="ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品番号") .Orientation = xlRowField .Position = 1 End With With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品名 ") .Orientation = xlRowField .Position = 2 End With Range("A9").Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("商品番号").Subtotals = Array( _ False, False, False, False, False, False, False, False, False, False, False, False) ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _ "ピボットテーブル2").PivotFields("数量 "), "データの個数 / 数量 ", xlCount With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("発送日 ") .Orientation = xlPageField .Position = 1 End With Range("A1").Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("発送日 ").Orientation = _ xlHidden With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("希望時期") .Orientation = xlColumnField .Position = 1 End With
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
空白行と空白列で囲まれたセル範囲を取得できる[CurrentRegion プロパティ]を使う事もできます。 参考まで。 Sub try() Dim r As Range Set r = ActiveSheet.Range("A1").CurrentRegion With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _ SourceData:=r.Address(external:=True) _ ).CreatePivotTable(TableDestination:="") .AddFields RowFields:=Array("商品番号", "商品名 "), _ ColumnFields:="希望時期", _ PageFields:="発送日 " .PivotFields("商品番号").Subtotals(1) = False With .PivotFields("数量 ") .Orientation = xlDataField .Caption = "データの個数 / 数量 " .Function = xlCount End With End With Set r = Nothing End Sub 類似Q&Aとしては http://oshiete1.goo.ne.jp/qa2926805.html ここなども参考になるかもしれません。
その他の回答 (1)
- Alpha-j
- ベストアンサー率66% (18/27)
以下は私が仕事で使っている自動化の一部です HANI でC1から列AN(最右)の一番下を指定しています。一番下を見る列はJです。これを応用すればデータのある範囲を指定できるはずです。 HANI = "シート名!C1:AN" & Trim(Str(Range("J2").End(xlDown).Row)) ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=HANI).CreatePivotTable _ TableDestination:="", TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="集計行名", ColumnFields:="集計列名" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("集計名") .Orientation = xlDataField .Caption = "集計" .Function = xlSum End With Application.CommandBars("PivotTable").Visible = False ActiveWorkbook.ShowPivotTableFieldList = False