VBA拡張版:複数グラフをまとめてHTMLメールに埋め込み(売上推移+エラー件数)
これまで「単一グラフをHTMLメールに埋め込む」方法を紹介しました。今回はさらに拡張して、複数のグラフ(例:売上推移+エラー件数)を画像化し、1通のHTMLメールにまとめて埋め込むテンプレートを紹介します。
手順の流れ
- Excelで複数グラフを作成(例:売上推移グラフ、エラー件数グラフ)
- それぞれを画像ファイルとして保存(PNG形式など)
- CDO.Messageでメール送信
- 添付ファイルを本文に埋め込み(Content-ID参照)
- HTML本文に複数の
<img>タグを配置
サンプルコード
Option Explicit
Sub SendMultiChartMailHTML()
Dim ws As Worksheet
Dim chartObj1 As ChartObject, chartObj2 As ChartObject
Dim chartFilePath1 As String, chartFilePath2 As String
Set ws = ThisWorkbook.Sheets("Sheet1")
'=== グラフ1: 売上推移 ===
Set chartObj1 = ws.ChartObjects.Add(Left:=50, Top:=50, Width:=400, Height:=300)
chartObj1.Chart.SetSourceData Source:=ws.Range("A1:B6") ' A列=月, B列=売上
chartObj1.Chart.ChartType = xlLine
chartFilePath1 = ThisWorkbook.Path & "\sales_chart.png"
chartObj1.Chart.Export Filename:=chartFilePath1, FilterName:="PNG"
'=== グラフ2: エラー件数 ===
Set chartObj2 = ws.ChartObjects.Add(Left:=500, Top:=50, Width:=400, Height:=300)
chartObj2.Chart.SetSourceData Source:=ws.Range("D1:E6") ' D列=月, E列=エラー件数
chartObj2.Chart.ChartType = xlColumnClustered
chartFilePath2 = ThisWorkbook.Path & "\error_chart.png"
chartObj2.Chart.Export Filename:=chartFilePath2, FilterName:="PNG"
'=== メール送信 ===
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タスク通知】売上推移+エラー件数レポート"
' 添付ファイルを本文に埋め込み
.AddAttachment chartFilePath1
.AddAttachment chartFilePath2
' HTML本文に複数グラフを埋め込み
.HTMLBody = _
"<html><body>" & _
"<h2 style='color:blue;'>📊 売上推移+エラー件数レポート</h2>" & _
"<p>以下は最新の業務データです。</p>" & _
"<h3 style='color:green;'>売上推移</h3>" & _
"<img src='cid:sales_chart.png'><br>" & _
"<h3 style='color:red;'>エラー件数</h3>" & _
"<img src='cid:error_chart.png'>" & _
"</body></html>"
.Send
End With
MsgBox "複数グラフ付きHTMLメールを送信しました", vbInformation
End Sub
VBこの拡張版のポイント
- 複数グラフを画像化 →
.Exportでそれぞれ保存 - HTML本文に複数
<img>タグ → グラフを並べて表示 - 見出し+色分け → 売上は緑、エラーは赤で直感的に区別
実務でのメリット
- ダッシュボード風通知メール → 複数の指標を一目で把握
- 自動レポート化 → タスクスケジューラと組み合わせれば「毎月の売上+エラー件数レポート」を自動送信可能
- 監査・報告に便利 → チームや管理者にそのまま共有できる
✅ まとめ
- 複数グラフを画像化してHTMLメールに埋め込み
- 成功/失敗通知に加え、業務データをダッシュボード風に可視化
- 完全自動化すれば「毎月の業務レポートメール」が完成


