• ベストアンサー

マクロでピボットテーブルを作成したい

こんばんは。マクロの自動記録を使って、ピボットテーブルを作成したのですが、記録した時のシート名とデータ範囲で記録されてしまいます。アクティブシートのデータがある範囲をピボットテーブルにしたい時は、どうすれば良いでしょうか? 以下のコードが自動記録で作成したコードです。 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

質問者が選んだベストアンサー

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.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)
回答No.1

以下は私が仕事で使っている自動化の一部です 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

関連するQ&A