VBA拡張版:複数シートのデータをまとめて1枚のダッシュボード画像にする
これまで「グラフ+テーブルを同じ画像にまとめる」方法を紹介しました。今回はさらに拡張して、複数シートのデータをまとめて1枚のダッシュボード画像にするテンプレートです。これにより、全社的なレポートを自動配信できるようになります。
手順の流れ
- 各シートにデータを配置(例:売上シート、エラーシート、在庫シートなど)
- 各シートからグラフを作成
- ダッシュボード用シートを作成
- 複数グラフやテーブルをダッシュボードシートに貼り付け
- ダッシュボードシートを画像化
- HTMLメールに埋め込み
サンプルコード
Option Explicit
Sub SendDashboardMailHTML()
Dim wsSales As Worksheet, wsError As Worksheet, wsStock As Worksheet
Dim wsDash As Worksheet
Dim chartObj As ChartObject
Dim dashFilePath As String
'=== データ準備(例) ===
Set wsSales = ThisWorkbook.Sheets("Sales")
Set wsError = ThisWorkbook.Sheets("Error")
Set wsStock = ThisWorkbook.Sheets("Stock")
'=== ダッシュボード用シート作成 ===
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
'=== 売上グラフ ===
Set chartObj = wsDash.ChartObjects.Add(Left:=20, Top:=20, Width:=300, Height:=200)
chartObj.Chart.SetSourceData Source:=wsSales.Range("A1:B6")
chartObj.Chart.ChartType = xlLine
chartObj.Chart.HasTitle = True
chartObj.Chart.ChartTitle.Text = "売上推移"
'=== エラー件数グラフ ===
Set chartObj = wsDash.ChartObjects.Add(Left:=350, Top:=20, Width:=300, Height:=200)
chartObj.Chart.SetSourceData Source:=wsError.Range("A1:B6")
chartObj.Chart.ChartType = xlColumnClustered
chartObj.Chart.HasTitle = True
chartObj.Chart.ChartTitle.Text = "エラー件数"
'=== 在庫テーブルをコピー ===
wsStock.Range("A1:C6").Copy wsDash.Range("A15")
'=== ダッシュボードを画像化 ===
dashFilePath = ThisWorkbook.Path & "\dashboard.png"
wsDash.Range("A1:H40").CopyPicture Appearance:=xlScreen, Format:=xlPicture
wsDash.Paste
wsDash.Shapes(wsDash.Shapes.Count).Export dashFilePath, "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 dashFilePath
' HTML本文にダッシュボード画像を埋め込み
.HTMLBody = _
"<html><body>" & _
"<h2 style='color:blue;'>📊 ダッシュボードレポート</h2>" & _
"<p>以下は複数シートのデータをまとめたダッシュボードです。</p>" & _
"<img src='cid:dashboard.png'>" & _
"</body></html>"
.Send
End With
MsgBox "ダッシュボード画像付きHTMLメールを送信しました", vbInformation
End Sub
VBこの拡張版のポイント
- 複数シートのデータを集約 → 売上・エラー・在庫などを1枚にまとめる
- ダッシュボードシートを作成 → グラフ+テーブルを配置
- CopyPicture+Export → ダッシュボード全体を画像化
- HTMLメールに埋め込み → 管理者が一目で全体を把握可能
実務でのメリット
- 全社的なレポートを自動配信 → 複数部門のデータをまとめて通知
- ダッシュボード風メール → 視覚的に分かりやすい
- 完全自動化可能 → タスクスケジューラと組み合わせれば「毎月の総合レポート」を自動送信
✅ まとめ
- 複数シートのデータをダッシュボードに集約
- 1枚の画像にまとめてHTMLメールで送信
- 管理者やチームに「全体像」を自動で共有可能


