VBAを使って1クリックでピボットテーブルを作成する

ピボットテーブルは、大量のデータをもとにさまざまな集計を行ったり、分析したりできる機能です。
例えば、「顧客や支店、さらには担当や商品ごとの集計といった、さまざまな視点から集計したり、分析したりすることができます。
今回はVBAを使ってボタンをクリックするだけでピボットテーブルを作成する方法をご紹介します。

ピボットテーブル作成の流れ

1.ピボットテーブルのキャッシュを作成
「PivotCaches」コレクションの「Create」メソッドでピボットテーブルの元となるデータをメモリ内に格納します。

2.ピボットテーブルの作成
「PivotCache」オブジェクトの「CreatePivotTable」メソッドで空白のピボットテーブルを作成します。

3.ピボットテーブルにフィールドを追加する
「PivotField」オブジェクトで行フィールド、列フィールド、値フィールドを追加してピボットテーブルを完成させます。

実際の利用方法は以下の通りです。

   'ピボットテーブルキャッシュの作成 → ピボットテーブル作成
     ThisWorkbook.PivotCaches.Create(xlDatabase, Worksheets("Sheet1").Range("B4:G16")) _
     .CreatePivotTable Sheets("Sheet1").Range("C20"), "ピボット1"


   'フィールドを設定
     With ActiveSheet.PivotTables("ピボット1")
     
        '会社名フィールド(行フィールド)の設定
         .PivotFields("会社名").Orientation = xlRowField
           
        '金額フィールドの設定
         With .PivotFields("金額")
              .Orientation = xlDataField '元データの種類をExcelの表に指定
         End With

     End With

サンプルコードの処理内容

「ピポットテーブル作成」ボタンをクリックすると会社ごとの集計金額の表が作成されます。
データ表の数字を変えて「ピポットテーブル更新」 ボタンをクリックすると会社ごとの集計金額が再集計されます。

サンプルコード   コードの作成手順はこちら

「ピポットテーブル作成」ボタン と 「ピポットテーブル更新」 ボタン のプログラムコードは以下の通りです。「 .NumberFormat = “#,##0" 」で集計金額を3桁区切りに指定しています。

Option Explicit

Sub ピボットテーブル作成()

   '既存のピポットテーブル(B20~C30)を削除
    Range("C20:D30").Delete shift:=xlShiftUp

   'ピボットキャッシュ作成 → ピボットテーブル作成
     ThisWorkbook.PivotCaches.Create(xlDatabase, Worksheets("Sheet1").Range("B4:G16")) _
     .CreatePivotTable Sheets("Sheet1").Range("C20"), "ピボット1"

   'フィールドを設定
     With ActiveSheet.PivotTables("ピボット1")
     
        '列幅を自動調整しないようにする
         .HasAutoFormat = False
                  
        '会社名フィールドの設定
         .PivotFields("会社名").Orientation = xlRowField  '行フィールドを設定
           
        '金額フィールドの設定
         With .PivotFields("金額")
              .Orientation = xlDataField
              .NumberFormat = "#,##0"    '3桁区切りを指定
         End With


     End With

 End Sub
 


----------------------------------------------------------------------------------------------
 
 
'ピボットテーブルの更新

 Sub UpdatePivot()
     Worksheets("Sheet1").PivotTables("ピボット1").PivotCache.Refresh
 End Sub