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

Excel VBA VBA
スポンサーリンク

VBA拡張版:Excelグラフを画像化してHTMLメールに埋め込む

ここまでで「HTMLメールにアイコンや画像を埋め込む」方法を紹介しました。さらに一歩進めて、Excelで生成したグラフ(Chart)を画像化してHTMLメールに埋め込む拡張版を作りましょう。これにより、処理結果をグラフで可視化して通知できます。


手順の流れ

  1. Excelでグラフを作成
    • 任意のシートにグラフを作成(例:棒グラフ)
  2. グラフを画像ファイルとして保存
    • .Export メソッドで PNG/JPG として保存
  3. CDO.Messageでメール送信
    • 添付ファイルを本文に埋め込み(Content-ID参照)

サンプルコード

Option Explicit

'=== グラフを画像化してHTMLメールに埋め込む ===
Sub SendChartMailHTML()
    Dim ws As Worksheet
    Dim chartObj As ChartObject
    Dim chartFilePath As String
    
    ' グラフを作成(例:Sheet1のA1:A5を棒グラフ化)
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set chartObj = ws.ChartObjects.Add(Left:=100, Top:=50, Width:=400, Height:=300)
    chartObj.Chart.SetSourceData Source:=ws.Range("A1:A5")
    chartObj.Chart.ChartType = xlColumnClustered
    
    ' グラフを画像として保存
    chartFilePath = ThisWorkbook.Path & "\chart.png"
    chartObj.Chart.Export Filename:=chartFilePath, FilterName:="PNG"
    
    ' メール送信
    Dim objMsg As Object
    Dim 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 chartFilePath
        
        ' HTML本文にグラフ画像を埋め込み(cid参照)
        .HTMLBody = _
            "<html><body>" & _
            "<h2 style='color:blue;'>📊 グラフ付きレポート</h2>" & _
            "<p>以下は処理結果のグラフです。</p>" & _
            "<img src='cid:chart.png'>" & _
            "</body></html>"
        
        .Send
    End With
    
    MsgBox "グラフ付きHTMLメールを送信しました", vbInformation
End Sub
VB

この拡張版のポイント

  • Excelグラフを画像化.Export メソッドで PNG に保存
  • CDO.Messageで添付+埋め込みcid:chart.png で本文に表示
  • HTMLメール本文にグラフを直接表示 → 管理者が一目で結果を把握可能

実務でのメリット

  • 数値だけでなくグラフで通知 → 視覚的に分かりやすい
  • 自動レポート化 → タスクスケジューラと組み合わせれば「毎月の集計結果をグラフ付きメールで送信」可能
  • 監査・報告に便利 → 管理者やチームにそのまま共有できる

✅ まとめ

  • Excelグラフを .Export で画像化
  • HTMLメールに cid で埋め込み
  • 成功/失敗通知に加えて「処理結果をグラフで可視化」できる
タイトルとURLをコピーしました