Home » エクセルマクロ・Excel VBAの使い方 » ピボットテーブル » VBAでピボットテーブルの小計を表示しないように

VBAでピボットテーブルの小計を表示しないように

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「vba ピボットテーブル 小計なし」
「vba ピボットフィールドの小計 非表示」
「excel vba ピボットテーブル 小計 非表示 マクロ」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

[ピボットテーブル ツール]-[デザイン]タブ-[小計]-[小計を表示しない]を選択すると、

ピボットテーブルの小計を非表示にできます。

これをVBA(Visual Basic for Applications)から行うには、どのようなコードを書けばいいのかを探していた方による検索キーワードでしょう。

[スポンサードリンク]

小計を表示しない操作をマクロ記録すると

上記の[小計を表示しない]を実行する操作をマクロ記録すると、以下のようなコードができます。

Sub Macro1()

 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("ID").Subtotals = Array(False, _

  False, False, False, False, False, False, False, False, False, False, False)

 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("日付").Subtotals = Array(False, _

  False, False, False, False, False, False, False, False, False, False, False)

 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("商品種別").Subtotals = Array(False, _

  False, False, False, False, False, False, False, False, False, False, False)

 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("商品名").Subtotals = Array(False _

  , False, False, False, False, False, False, False, False, False, False, False)

 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("単価").Subtotals = Array(False, _

  False, False, False, False, False, False, False, False, False, False, False)

 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("個数").Subtotals = Array(False, _

  False, False, False, False, False, False, False, False, False, False, False)

 ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("売上額").Subtotals = Array(False, _

  False, False, False, False, False, False, False, False, False, False, False)

End Sub

Excelのマクロ記録機能では、条件分岐文やループ文が作られないという、見本のようなマクロです。

ピボットテーブルの元データの、すべてのフィールドのSubtotalsプロパティを、地道にFalseにしているコードです。

小計を非表示にするサンプルマクロ

For Each~Nextループを使った以下のようなマクロにすれば、アクティブなワークシート上の1個目のピボットテーブルの、小計が非表示になります。

Sub 小計を非表示にする()
 Dim pv_fld As PivotField

 For Each pv_fld In ActiveSheet.PivotTables(1).PivotFields
  pv_fld.Subtotals(1) = True
  pv_fld.Subtotals(1) = False
 Next pv_fld
End Sub

PivotFieldオブジェクトのSubtotalsプロパティには、12個の要素を持った配列を指定できます。

そのためマクロ記録でできたコードでは、代入文の右辺が、
「Array(False, False, False, False, False, False, False, False, False, False, False, False)」
と、Array関数の引数にFalseを12個指定した状態になっていました。

PivotField.Subtotalsプロパティのヘルプによると、
インデックスが True の場合、フィールドにその集計が表示されます。インデックス 1 (自動) が True である場合、その他のすべての値に False が設定されます。

とのことなので、全PivotFieldオブジェクトに対するFor Each~Nextループ内で、
  For Each pv_fld In ActiveSheet.PivotTables(1).PivotFields

インデックス「1」の要素を一旦Trueにして他の11個をFalseにして、
   pv_fld.Subtotals(1) = True

その後Falseにすることで、
   pv_fld.Subtotals(1) = False

12個の要素すべてをFalseに、つまり小計を非表示にしています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ピボットテーブル » VBAでピボットテーブルの小計を表示しないように

「ピボットテーブル」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.