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

Excel VBA VBA
スポンサーリンク

VBA拡張版:グラフ+テーブル(数値データ)を同じ画像にまとめて送信

これまで「複数グラフを合成」する方法を紹介しました。今回はさらに拡張して、グラフと数値データのテーブルを同じ画像にまとめて送信するテンプレートです。これにより、数値とグラフを同時に可視化したレポートメールが作れます。


手順の流れ

  1. Excelシートに数値データを配置
  2. グラフを作成
  3. シート全体(テーブル+グラフ)を画像化
  4. 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メールに埋め込むことで「見やすいレポート通知」が完成
  • 実務での報告や監査に最適
タイトルとURLをコピーしました