VBA初心者がピボットテーブルを作成するメモ


ピボットテーブル作成

VBAで集計して別シートに張り付けるを考えたけど、ピボットにしたほうが自分でいろいろと加工できるかなと考え、ピボット作成方法をまとめる。

まずは、ピボット用シート作成のVBA。

'システムID別ピボット用シート作成
Sub CreatePivotTableBySystemId()
    'データシート
    Dim DataS As Worksheet
    'ピボットテーブルを作成するシート
    Dim PivotS As Worksheet
    'ピボットキャッシュ用変数
    Dim PCache As PivotCache

    Set DataS = ThisWorkbook.Worksheets("データ")

    '「データ」シートからピボットキャッシュを作成
    Dim lowRow As Long
    lowRow = ActiveWorkbook.Worksheets("データ").Cells(Rows.Count, 2).End(xlUp).Row
    Set PCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=DataS.Range("B1:E" & lowRow))

    'ピボットテーブル用シートを追加
    Worksheets.Add
    ActiveSheet.Name = "システムID別集計"
    Set PivotS = ThisWorkbook.Worksheets("システムID別集計")

    'ピボットテーブル用シートにピボットテーブル作成
    PCache.CreatePivotTable TableDestination:=PivotS.Range("A1"), TableName:="システムID別集計"
End Sub

次に追加したピボット用シートに項目を設定するVBA。

'システムID別ピボット用シートに項目設定
Sub AddPivotFieldsBySystemId()
    'ピボットテーブルがあるシート
    Dim PivotS As Worksheet

    Set PivotS = ThisWorkbook.Worksheets("システムID別集計")

    'ピボットテーブルに行と列フィールドを追加
    PivotS.PivotTables("システムID別集計").AddFields ColumnFields:=Array("場所"), RowFields:=Array("システムID")

    'ピボットテーブルに値フィールドを追加
    PivotS.PivotTables("システムID別集計").AddDataField Field:=PivotS.PivotTables("システムID別集計").PivotFields("時間"), Function:=xlSum
End Sub