ここでは 複数ブックにまたがって条件付きでピボットグラフをPDFや画像に出力する VBAの例を紹介します。ポイントは「複数ブックをループして条件に合致するピボットテーブルを探し、そのグラフを作成して PDF や画像ファイルとして保存する」ことです。
基本例:各ブックの「Data」シートにあるピボットをPDFに出力
Sub 複数ブックでピボットグラフPDF出力()
Dim wb As Workbook
Dim ws As Worksheet
Dim pt As PivotTable
Dim chartObj As ChartObject
Dim pdfPath As String
For Each wb In Application.Workbooks
If wb.Name <> ThisWorkbook.Name Then
For Each ws In wb.Worksheets
' 条件:シート名が「Data」
If ws.Name = "Data" Then
For Each pt In ws.PivotTables
' ピボット名に「数量」または「売上」が含まれる場合のみ対象
If InStr(pt.Name, "数量") > 0 Or InStr(pt.Name, "売上") > 0 Then
' グラフ作成
Set chartObj = ws.ChartObjects.Add(Left:=300, Top:=50, Width:=400, Height:=300)
chartObj.Chart.SetSourceData Source:=pt.TableRange2
chartObj.Chart.ChartType = xlColumnClustered
chartObj.Chart.HasTitle = True
chartObj.Chart.ChartTitle.Text = pt.Name & " グラフ"
' PDFとして保存
pdfPath = wb.Path & "\" & ws.Name & "_" & pt.Name & ".pdf"
chartObj.Chart.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
chartObj.Delete
End If
Next pt
End If
Next ws
End If
Next wb
End Sub
VB👉 開いているすべてのブックから「Data」シートにある 数量ピボット と 売上ピボット をグラフ化し、それぞれを PDF ファイルとして保存します。
応用例1:画像ファイル(PNG)として出力
Sub ピボットグラフ画像出力()
Dim wb As Workbook
Dim ws As Worksheet
Dim pt As PivotTable
Dim chartObj As ChartObject
Dim imgPath As String
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
' A1セルが「画像出力」と書かれていたら対象
If ws.Range("A1").Value = "画像出力" Then
For Each pt In ws.PivotTables
Set chartObj = ws.ChartObjects.Add(Left:=300, Top:=50, Width:=400, Height:=300)
chartObj.Chart.SetSourceData Source:=pt.TableRange2
chartObj.Chart.ChartType = xlPie
chartObj.Chart.HasTitle = True
chartObj.Chart.ChartTitle.Text = pt.Name & " グラフ"
' PNG画像として保存
imgPath = wb.Path & "\" & ws.Name & "_" & pt.Name & ".png"
chartObj.Chart.Export Filename:=imgPath, FilterName:="PNG"
chartObj.Delete
Next pt
End If
Next ws
Next wb
End Sub
VB👉 各シートのA1セルに「画像出力」と書かれている場合のみ、そのシートのピボットグラフを PNG 画像として保存します。
応用例2:複数条件を組み合わせて PDF & PNG 同時出力
Sub 複数条件でピボットグラフ出力()
Dim wb As Workbook
Dim ws As Worksheet
Dim pt As PivotTable
Dim chartObj As ChartObject
Dim pdfPath As String, imgPath As String
For Each wb In Application.Workbooks
For Each ws In wb.Worksheets
' 条件1: シート名が「Sales」で始まる
' 条件2: B2セルが100以上
If Left(ws.Name, 5) = "Sales" And ws.Range("B2").Value >= 100 Then
For Each pt In ws.PivotTables
If InStr(pt.Name, "数量") > 0 Or InStr(pt.Name, "売上") > 0 Then
Set chartObj = ws.ChartObjects.Add(Left:=300, Top:=50, Width:=400, Height:=300)
chartObj.Chart.SetSourceData Source:=pt.TableRange2
chartObj.Chart.ChartType = xlLine
chartObj.Chart.HasTitle = True
chartObj.Chart.ChartTitle.Text = pt.Name & " グラフ"
' PDF保存
pdfPath = wb.Path & "\" & ws.Name & "_" & pt.Name & ".pdf"
chartObj.Chart.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfPath
' PNG保存
imgPath = wb.Path & "\" & ws.Name & "_" & pt.Name & ".png"
chartObj.Chart.Export Filename:=imgPath, FilterName:="PNG"
chartObj.Delete
End If
Next pt
End If
Next ws
Next wb
End Sub
VBポイント
- PDF出力 →
Chart.ExportAsFixedFormat Type:=xlTypePDF - 画像出力 →
Chart.Export Filename:=..., FilterName:="PNG" - 複数種類同時出力 → 条件に合致したピボットを PDF と PNG 両方で保存可能
- 条件判定 → シート名やセルの値を使って柔軟に対象を絞り込み
練習課題
- 全ブックの「Sheet2」にあるピボットグラフを PDF と PNG 両方で保存するコードを書いてみる
- 各シートのC1セルが「Export」と書かれていたらピボットグラフを画像に出力するコードを作る
- 複数条件を組み合わせて「シート名がReportで始まり、A1セルが空でないなら数量・売上ピボットを PDF と PNG に出力する」コードを作る
こうした仕組みを作ると、複数ブックにまたがって条件付きでピボットグラフをPDFや画像に出力する自動化ツールが完成します。


