VBA拡張版:ダッシュボード画像をPDF化してメール添付
これまで「ダッシュボード画像をメール本文に埋め込む」方法を紹介しました。今回はさらに拡張して、ダッシュボードをPDF化してメールに添付するテンプレートです。これにより、印刷や保存に適したレポート形式で配信できます。
手順の流れ
- ダッシュボードシートを作成(グラフ+テーブルを配置)
- シート全体をPDFとして保存
- CDO.Messageでメール送信
- PDFファイルを添付
- HTML本文には簡単な説明を記載
サンプルコード
Option Explicit
Sub SendDashboardPDFMail()
Dim wsDash As Worksheet
Dim pdfFilePath As String
'=== ダッシュボードシート準備 ===
On Error Resume Next
Set wsDash = ThisWorkbook.Sheets("Dashboard")
If wsDash Is Nothing Then
Set wsDash = ThisWorkbook.Sheets.Add
wsDash.Name = "Dashboard"
End If
On Error GoTo 0
' 例:売上データとグラフを配置
wsDash.Cells.Clear
wsDash.Range("A1").Value = "月"
wsDash.Range("B1").Value = "売上"
wsDash.Range("A2").Value = "1月": wsDash.Range("B2").Value = 100
wsDash.Range("A3").Value = "2月": wsDash.Range("B3").Value = 120
wsDash.Range("A4").Value = "3月": wsDash.Range("B4").Value = 90
wsDash.Range("A5").Value = "4月": wsDash.Range("B5").Value = 150
Dim chartObj As ChartObject
Set chartObj = wsDash.ChartObjects.Add(Left:=200, Top:=20, Width:=400, Height:=300)
chartObj.Chart.SetSourceData Source:=wsDash.Range("A1:B5")
chartObj.Chart.ChartType = xlColumnClustered
chartObj.Chart.HasTitle = True
chartObj.Chart.ChartTitle.Text = "売上推移"
'=== PDFとして保存 ===
pdfFilePath = ThisWorkbook.Path & "\dashboard_report.pdf"
wsDash.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFilePath, Quality:=xlQualityStandard
'=== メール送信 ===
Dim objMsg As Object, objConf As Object
Set objMsg = CreateObject("CDO.Message")
Set objConf = CreateObject("CDO.Configuration")
' SMTP設定(例:Office365)
With objConf.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
.Update
End With
With objMsg
Set .Configuration = objConf
.From = "your_account@domain.com"
.To = "admin@domain.com"
.Subject = "【VBAタスク通知】ダッシュボードレポート(PDF添付)"
' PDFファイルを添付
.AddAttachment pdfFilePath
' HTML本文
.HTMLBody = _
"<html><body>" & _
"<h2 style='color:blue;'>📊 ダッシュボードレポート</h2>" & _
"<p>最新の業務データをPDFレポートとして添付しました。</p>" & _
"<p>添付ファイルをご確認ください。</p>" & _
"</body></html>"
.Send
End With
MsgBox "ダッシュボードPDFを添付したメールを送信しました", vbInformation
End Sub
VBこの拡張版のポイント
- ExportAsFixedFormat → ダッシュボードシートをPDF化
- CDO.Messageで添付送信 → PDFをメールに添付
- HTML本文は簡潔に → 添付ファイルを主役に
実務でのメリット
- 印刷や保存に適した形式 → PDFは改ざんされにくく、共有に最適
- ダッシュボードをそのままレポート化 → グラフ+テーブルを一括配信
- 完全自動化可能 → タスクスケジューラと組み合わせれば「毎月のPDFレポート」を自動送信
✅ まとめ
- ダッシュボードをPDF化してメール添付
- 管理者やチームに「正式なレポート形式」で通知可能
- 実務での報告・監査に最適


