VBA拡張版:複数ブックをまとめて1つのPDFにしてメール添付
これまで「複数シートをまとめてPDF化」する方法を紹介しました。今回はさらに拡張して、複数のExcelブックをまとめて1つのPDFにしてメール添付するテンプレートです。これにより、異なるファイルのレポートを一括配信できます。
手順の流れ
- 対象ブックを開く(例:Sales.xlsx、Error.xlsx、Stock.xlsx)
- 各ブックの対象シートをPDF化(一時ファイルとして保存)
- PDFを結合(簡易的には「複数PDFを1つにまとめる」外部ツールが必要ですが、VBAでは「複数シートを1つのPDFにまとめる」方法を応用)
- CDO.Messageでメール送信
- PDFファイルを添付
- HTML本文に説明を記載
サンプルコード(複数ブック → PDF → 添付)
Option Explicit
Sub SendMultiWorkbookPDFMail()
Dim wbSales As Workbook, wbError As Workbook, wbStock As Workbook
Dim pdfFilePath As String
'=== 複数ブックを開く ===
Set wbSales = Workbooks.Open(ThisWorkbook.Path & "\Sales.xlsx")
Set wbError = Workbooks.Open(ThisWorkbook.Path & "\Error.xlsx")
Set wbStock = Workbooks.Open(ThisWorkbook.Path & "\Stock.xlsx")
'=== PDFファイルパス ===
pdfFilePath = ThisWorkbook.Path & "\multi_workbook_report.pdf"
'=== 複数ブックのシートをまとめてPDF化 ===
' → VBA単体では「複数ブックを直接まとめる」機能はないため、
' 一度「一時的にコピーシートを1つのブックに集約」してからPDF化する
Dim wbTemp As Workbook
Set wbTemp = Workbooks.Add
wbSales.Sheets(1).Copy After:=wbTemp.Sheets(wbTemp.Sheets.Count)
wbError.Sheets(1).Copy After:=wbTemp.Sheets(wbTemp.Sheets.Count)
wbStock.Sheets(1).Copy After:=wbTemp.Sheets(wbTemp.Sheets.Count)
' 最初に作られる空白シートを削除
Application.DisplayAlerts = False
wbTemp.Sheets(1).Delete
Application.DisplayAlerts = True
' PDFとして保存
wbTemp.Sheets.Select
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFilePath, Quality:=xlQualityStandard
wbTemp.Close SaveChanges:=False
wbSales.Close SaveChanges:=False
wbError.Close SaveChanges:=False
wbStock.Close SaveChanges:=False
'=== メール送信 ===
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.xlsx・Error.xlsx・Stock.xlsx をまとめたPDFレポートを添付しました。</p>" & _
"<p>添付ファイルをご確認ください。</p>" & _
"</body></html>"
.Send
End With
MsgBox "複数ブックをまとめたPDFを添付したメールを送信しました", vbInformation
End Sub
VBこの拡張版のポイント
- 複数ブックを一時的に1つのブックに集約 → まとめてPDF化可能
- CDO.Messageで添付送信 → PDFをメールに添付
- HTML本文は簡潔に → 添付ファイルを主役に
実務でのメリット
- 異なるファイルのレポートを一括配信 → 部門別ファイルをまとめて送信
- 印刷や保存に適した形式 → PDFは改ざんされにくく、監査にも最適
- 完全自動化可能 → タスクスケジューラと組み合わせれば「毎月の総合レポート」を自動送信
✅ まとめ
- 複数ブックを一時的に集約 → PDF化
- メールに添付して一括配信
- 部門別や複数ファイルをまとめた「総合レポート」を自動送信可能


