ピボットテーブルを使ってデータを加工することがあります。
でもピボットテーブルをマクロで作る方法って難しいですよね。
そこで今回は、VBAでピボットテーブルを自動作成する方法を解説します。
【マクロVBA】ピボットテーブルを自動作成する方法を解説
以下のエクセルデータをピボットテーブルにするコードを作成しました。
Sub CreatePivotTable()
'リストの範囲を取得
Dim rowCount As Long
Dim colCount As Long
Dim sourceRange As Range
With Range("A1").CurrentRegion
rowCount = .Rows.Count
colCount = .Columns.Count
Set sourceRange = .Resize(rowCount, colCount)
End With
'ピポットテーブル用のシートを作成
Dim pivotSheet As Worksheet
Set pivotSheet = Sheets.Add
pivotSheet.Name = "データ"
'ピボットテーブルを作成
Dim pivotCache As pivotCache
Set pivotCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sourceRange, Version:=6)
Dim pivotTable As pivotTable
Set pivotTable = pivotCache.CreatePivotTable(TableDestination:=pivotSheet.Cells(3, 1), TableName:="ピボットテーブル", DefaultVersion:=6)
'任意の項目を列に追加
With pivotTable
.PivotFields("担当者").Orientation = xlRowField
.PivotFields("商品").Orientation = xlRowField
End With
'金額フィールドをデータフィールドとして合計
With pivotTable.PivotFields("金額")
.Orientation = xlDataField
.Function = xlSum
End With
'ピボットテーブルのレイアウトを「表形式で表示」に設定
pivotTable.RowAxisLayout xlTabularRow
End Sub
リストの範囲を取得
'リストの範囲を取得
Dim rowCount As Long
Dim colCount As Long
Dim sourceRange As Range
With Range("A1").CurrentRegion
rowCount = .Rows.Count
colCount = .Columns.Count
Set sourceRange = .Resize(rowCount, colCount)
End With
このコードは、現在のワークシート上のリストの範囲を取得しています。
それぞれの行の説明は以下の通りです。
Dim rowCount As Long
:rowCount
という名前の変数を作成し、リストの行数を格納するために使用します。Dim colCount As Long
:colCount
という名前の変数を作成し、リストの列数を格納するために使用します。Dim sourceRange As Range
:sourceRange
という名前の変数を作成し、リストの範囲(セル)を格納するために使用します。With Range("A1").CurrentRegion
: セルA1から始まる連続したデータ領域(リスト)を参照します。このWith
ステートメントにより、以下のコードで.CurrentRegion
を繰り返し参照することなく、この領域に対して操作を行うことができます。rowCount = .Rows.Count
:.CurrentRegion
の行数を数え、rowCount
変数に格納します。colCount = .Columns.Count
:.CurrentRegion
の列数を数え、colCount
変数に格納します。Set sourceRange = .Resize(rowCount, colCount)
:sourceRange
変数に、.CurrentRegion
の範囲を設定します。これにより、sourceRange
変数はリストの範囲を指します。End With
:With
ステートメントを終了します。これで、.CurrentRegion
を参照する操作が終わります。
このコードの結果、sourceRange
変数は、ワークシート上のリスト(連続したデータ領域)を指すようになります。
このsourceRange
は、後続のコードでピボットテーブルのデータソースとして使用されます。
ピポットテーブル用のシートを作成
'ピポットテーブル用のシートを作成
Dim pivotSheet As Worksheet
Set pivotSheet = Sheets.Add
pivotSheet.Name = "データ"
このコードは、新しいワークシートを作成し、ピボットテーブルを配置するために使用します。
それぞれの行の説明は以下の通りです。
Dim pivotSheet As Worksheet
:pivotSheet
という名前の変数を作成し、新しく作成されるワークシートを格納するために使用します。Set pivotSheet = Sheets.Add
:Sheets.Add
を使って新しいワークシートを作成し、作成されたワークシートをpivotSheet
変数に格納します。この時点で、pivotSheet
変数は新しく作成されたワークシートを指しています。pivotSheet.Name = "データ"
: 新しく作成されたワークシートの名前を「データ」に変更します。これにより、新しいワークシートは「データ」という名前でアクセスできるようになります。
このコードの結果、新しいワークシートが作成され、「データ」という名前が付けられます。
ピボットテーブルを作成
'ピボットテーブルを作成
Dim pivotCache As PivotCache
Set pivotCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sourceRange, Version:=6)
Dim pivotTable As PivotTable
Set pivotTable = pivotCache.CreatePivotTable(TableDestination:=pivotSheet.Cells(3, 1), TableName:="ピボットテーブル", DefaultVersion:=6)
このコードは、ピボットテーブルを作成するために使用されます。それぞれの行の説明は以下の通りです。
Dim pivotCache As PivotCache
:pivotCache
という名前の変数を作成し、ピボットテーブルのデータソース(キャッシュ)を格納するために使用します。Set pivotCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=sourceRange, Version:=6)
:ActiveWorkbook.PivotCaches.Create
メソッドを使って、新しいピボットキャッシュを作成します。引数は次のとおりです。
SourceType:=xlDatabase
: データソースのタイプを指定します。この場合、Excelのデータベース(ワークシート上のリスト)が指定されています。SourceData:=sourceRange
: データソースの範囲を指定します。以前に取得したリストの範囲(sourceRange
変数)が使用されます。Version:=6
: ピボットテーブルのバージョンを指定します。6はExcel 2016以降で使用されているバージョンです。
Dim pivotTable As PivotTable
:pivotTable
という名前の変数を作成し、新しく作成されるピボットテーブルを格納するために使用します。Set pivotTable = pivotCache.CreatePivotTable(TableDestination:=pivotSheet.Cells(3, 1), TableName:="ピボットテーブル", DefaultVersion:=6)
:pivotCache.CreatePivotTable
メソッドを使って、新しいピボットテーブルを作成し、pivotTable
変数に格納します。引数は次のとおりです。
TableDestination:=pivotSheet.Cells(3, 1)
: ピボットテーブルを配置するワークシートとセルを指定します。新しく作成した「データ」ワークシートのR3C1(3行1列目)が指定されています。TableName:="ピボットテーブル"
: ピボットテーブルに名前を付けます。この例では、名前は「ピボットテーブル」です。DefaultVersion:=6
: ピボットテーブルのバージョンを指定します。6はExcel 2016以降で使用されているバージョンです。
このコードの結果、新しいピボットテーブルが作成され、「データ」という名前のワークシートのR3C1(3行1列目)に配置されます。
任意の項目に列を追加
'任意の項目を列に追加
With pivotTable
.PivotFields("担当者").Orientation = xlRowField
.PivotFields("商品").Orientation = xlRowField
End With
'金額フィールドをデータフィールドとして合計
With pivotTable.PivotFields("金額")
.Orientation = xlDataField
.Function = xlSum
End With
このコードは、ピボットテーブルにデータを追加し、行とデータフィールドを設定するために使用されます。それぞれの行の説明は以下の通りです。
With pivotTable
:pivotTable
変数が指すピボットテーブルを操作するためのWith
ステートメントを開始します。.PivotFields("担当者").Orientation = xlRowField
: 担当者フィールドを行フィールドとして設定します。これにより、ピボットテーブルの行に担当者が表示されます。.PivotFields("商品").Orientation = xlRowField
: 商品フィールドを行フィールドとして設定します。これにより、ピボットテーブルの行に商品が表示されます。End With
:With
ステートメントを終了します。これにより、pivotTable
変数が指すピボットテーブルに対する操作が完了します。With pivotTable.PivotFields("金額")
: 金額フィールドを操作するためのWith
ステートメントを開始します。.Orientation = xlDataField
: 金額フィールドをデータフィールドとして設定します。これにより、ピボットテーブルのデータ部分に金額が表示されます。.Function = xlSum
: 金額フィールドの集計方法を合計(xlSum
)に設定します。これにより、ピボットテーブルのデータ部分には、金額の合計が表示されます。End With
:With
ステートメントを終了します。これにより、金額フィールドに対する操作が完了します。
このコードの結果、ピボットテーブルには担当者と商品が行フィールドとして設定され、金額がデータフィールドとして合計された値が表示されます。
これにより、担当者と商品ごとの金額の合計が分かるピボットテーブルが作成されます。
ピボットテーブルのレイアウトを「表形式で表示」に設定
'ピボットテーブルのレイアウトを「表形式で表示」に設定
pivotTable.RowAxisLayout xlTabularRow
この行のコードは、ピボットテーブルのレイアウトを「表形式で表示」に設定するために使用されます。説明は以下の通りです。
pivotTable.RowAxisLayout
: ピボットテーブルオブジェクトのRowAxisLayout
メソッドを呼び出します。このメソッドは、ピボットテーブルの行レイアウトを変更するために使用されます。xlTabularRow
: 行レイアウトのスタイルを指定するためのExcel定数です。「表形式で表示」(Tabular)スタイルを適用するために使用されます。このスタイルでは、各フィールドが独自の列に表示され、データが読みやすい形式で提示されます。
このコードの結果、ピボットテーブルの行レイアウトが「表形式で表示」に設定されます。
これにより、担当者と商品フィールドが独立した列に表示され、データが見やすく整理された形式で表示されます。
コメント