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

Excel VBA VBA
スポンサーリンク

VBA拡張版:複数シートをまとめて1つのPDFにしてメール添付

これまで「ダッシュボードをPDF化してメール添付」する方法を紹介しました。今回はさらに拡張して、複数シートをまとめて1つのPDFにしてメール添付するテンプレートです。これにより、部門別レポートや複数の集計結果を一括配信できます。


手順の流れ

  1. 対象シートを選択(例:Sales, Error, Stock)
  2. ExportAsFixedFormatで複数シートをまとめてPDF化
  3. CDO.Messageでメール送信
    • PDFファイルを添付
    • HTML本文に説明を記載

サンプルコード

Option Explicit

Sub SendMultiSheetPDFMail()
    Dim pdfFilePath As String
    Dim wsArray As Variant
    
    '=== 対象シートを指定 ===
    wsArray = Array("Sales", "Error", "Stock") ' 複数シート名
    
    '=== PDFファイルパス ===
    pdfFilePath = ThisWorkbook.Path & "\multi_report.pdf"
    
    '=== 複数シートをPDF化 ===
    ThisWorkbook.Sheets(wsArray).Select
    ActiveSheet.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>Sales・Error・StockシートをまとめたPDFレポートを添付しました。</p>" & _
            "<p>添付ファイルをご確認ください。</p>" & _
            "</body></html>"
        
        .Send
    End With
    
    MsgBox "複数シートをまとめたPDFを添付したメールを送信しました", vbInformation
End Sub
VB

この拡張版のポイント

  • 複数シートをまとめてPDF化Sheets(Array(...)).SelectExportAsFixedFormat
  • CDO.Messageで添付送信 → PDFをメールに添付
  • HTML本文は簡潔に → 添付ファイルを主役に

実務でのメリット

  • 部門別レポートを一括配信 → Sales・Error・Stockなどをまとめて送信
  • 印刷や保存に適した形式 → PDFは改ざんされにくく、監査にも最適
  • 完全自動化可能 → タスクスケジューラと組み合わせれば「毎月の総合レポート」を自動送信

✅ まとめ

  • 複数シートをまとめてPDF化
  • メールに添付して一括配信
  • 部門別や複数データをまとめた「総合レポート」を自動送信可能
タイトルとURLをコピーしました