電子書籍の厳選無料作品が豊富!

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

以下のコードが自動記録で作成したコードです。

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

A 回答 (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
ここなども参考になるかもしれません。
    • good
    • 0

以下は私が仕事で使っている自動化の一部です


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
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!