Excel VBA | 実務用 VBA コード集(テンプレ付き)

Excel VBA VBA
スポンサーリンク

VBA拡張版:複数グラフをまとめてHTMLメールに埋め込み(売上推移+エラー件数)

これまで「単一グラフをHTMLメールに埋め込む」方法を紹介しました。今回はさらに拡張して、複数のグラフ(例:売上推移+エラー件数)を画像化し、1通のHTMLメールにまとめて埋め込むテンプレートを紹介します。


手順の流れ

  1. Excelで複数グラフを作成(例:売上推移グラフ、エラー件数グラフ)
  2. それぞれを画像ファイルとして保存(PNG形式など)
  3. 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メールに埋め込み
  • 成功/失敗通知に加え、業務データをダッシュボード風に可視化
  • 完全自動化すれば「毎月の業務レポートメール」が完成
タイトルとURLをコピーしました