VBA拡張版:グラフ+テーブル(数値データ)を同じ画像にまとめて送信
これまで「複数グラフを合成」する方法を紹介しました。今回はさらに拡張して、グラフと数値データのテーブルを同じ画像にまとめて送信するテンプレートです。これにより、数値とグラフを同時に可視化したレポートメールが作れます。
手順の流れ
- Excelシートに数値データを配置
- グラフを作成
- シート全体(テーブル+グラフ)を画像化
- HTMLメールに埋め込み
サンプルコード
Option Explicit
Sub SendTableAndChartMailHTML()
Dim ws As Worksheet
Dim chartObj As ChartObject
Dim combinedFilePath As String
'=== データ準備(例:売上データ) ===
Set ws = ThisWorkbook.Sheets("Sheet1")
ws.Range("A1").Value = "月"
ws.Range("B1").Value = "売上"
ws.Range("A2").Value = "1月": ws.Range("B2").Value = 100
ws.Range("A3").Value = "2月": ws.Range("B3").Value = 120
ws.Range("A4").Value = "3月": ws.Range("B4").Value = 90
ws.Range("A5").Value = "4月": ws.Range("B5").Value = 150
'=== グラフ作成 ===
Set chartObj = ws.ChartObjects.Add(Left:=200, Top:=20, Width:=400, Height:=300)
chartObj.Chart.SetSourceData Source:=ws.Range("A1:B5")
chartObj.Chart.ChartType = xlColumnClustered
'=== テーブル+グラフを画像化 ===
combinedFilePath = ThisWorkbook.Path & "\report.png"
ws.Range("A1:C20").CopyPicture Appearance:=xlScreen, Format:=xlPicture
ws.Paste
ws.Shapes(ws.Shapes.Count).Export combinedFilePath, "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 combinedFilePath
' HTML本文に画像を埋め込み
.HTMLBody = _
"<html><body>" & _
"<h2 style='color:blue;'>📊 売上レポート</h2>" & _
"<p>以下は売上データとグラフをまとめたレポートです。</p>" & _
"<img src='cid:report.png'>" & _
"</body></html>"
.Send
End With
MsgBox "グラフ+テーブルをまとめたHTMLメールを送信しました", vbInformation
End Sub
VBこの拡張版のポイント
- テーブル+グラフを同じ範囲に配置 → 1枚の画像にまとめられる
- CopyPicture+Export を利用 → シート範囲を画像化
- HTMLメールに埋め込み → 管理者が一目で数値とグラフを確認可能
実務でのメリット
- 数値とグラフを同時に可視化 → データの裏付けが明確
- ダッシュボード風レポート → 管理者が一目で状況を把握
- 完全自動化可能 → タスクスケジューラと組み合わせれば「毎月の売上レポート」を自動送信
✅ まとめ
- グラフ+テーブルを同じ画像にまとめて送信
- HTMLメールに埋め込むことで「見やすいレポート通知」が完成
- 実務での報告や監査に最適


