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

Excel VBA VBA
スポンサーリンク

VBA拡張版:ダッシュボード画像をPDF化してメール添付

これまで「ダッシュボード画像をメール本文に埋め込む」方法を紹介しました。今回はさらに拡張して、ダッシュボードをPDF化してメールに添付するテンプレートです。これにより、印刷や保存に適したレポート形式で配信できます。


手順の流れ

  1. ダッシュボードシートを作成(グラフ+テーブルを配置)
  2. シート全体をPDFとして保存
  3. CDO.Messageでメール送信
    • PDFファイルを添付
    • HTML本文には簡単な説明を記載

サンプルコード

Option Explicit

Sub SendDashboardPDFMail()
    Dim wsDash As Worksheet
    Dim pdfFilePath As String
    
    '=== ダッシュボードシート準備 ===
    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
    wsDash.Range("A1").Value = "月"
    wsDash.Range("B1").Value = "売上"
    wsDash.Range("A2").Value = "1月": wsDash.Range("B2").Value = 100
    wsDash.Range("A3").Value = "2月": wsDash.Range("B3").Value = 120
    wsDash.Range("A4").Value = "3月": wsDash.Range("B4").Value = 90
    wsDash.Range("A5").Value = "4月": wsDash.Range("B5").Value = 150
    
    Dim chartObj As ChartObject
    Set chartObj = wsDash.ChartObjects.Add(Left:=200, Top:=20, Width:=400, Height:=300)
    chartObj.Chart.SetSourceData Source:=wsDash.Range("A1:B5")
    chartObj.Chart.ChartType = xlColumnClustered
    chartObj.Chart.HasTitle = True
    chartObj.Chart.ChartTitle.Text = "売上推移"
    
    '=== PDFとして保存 ===
    pdfFilePath = ThisWorkbook.Path & "\dashboard_report.pdf"
    wsDash.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFilePath, Quality:=xlQualityStandard
    
    '=== メール送信 ===
    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タスク通知】ダッシュボードレポート(PDF添付)"
        
        ' PDFファイルを添付
        .AddAttachment pdfFilePath
        
        ' HTML本文
        .HTMLBody = _
            "<html><body>" & _
            "<h2 style='color:blue;'>📊 ダッシュボードレポート</h2>" & _
            "<p>最新の業務データをPDFレポートとして添付しました。</p>" & _
            "<p>添付ファイルをご確認ください。</p>" & _
            "</body></html>"
        
        .Send
    End With
    
    MsgBox "ダッシュボードPDFを添付したメールを送信しました", vbInformation
End Sub
VB

この拡張版のポイント

  • ExportAsFixedFormat → ダッシュボードシートをPDF化
  • CDO.Messageで添付送信 → PDFをメールに添付
  • HTML本文は簡潔に → 添付ファイルを主役に

実務でのメリット

  • 印刷や保存に適した形式 → PDFは改ざんされにくく、共有に最適
  • ダッシュボードをそのままレポート化 → グラフ+テーブルを一括配信
  • 完全自動化可能 → タスクスケジューラと組み合わせれば「毎月のPDFレポート」を自動送信

✅ まとめ

  • ダッシュボードをPDF化してメール添付
  • 管理者やチームに「正式なレポート形式」で通知可能
  • 実務での報告・監査に最適
タイトルとURLをコピーしました