1. 概要
この記事では、Excel VBAを使用して、指定したシートをPDF形式に変換し、Outlookのメールに添付して送信する方法を説明します。
添付するPDFは一時ファイルとして作成され、メール送信後に自動削除されます。
また、メールの宛先、CC、件名、本文、さらに必要に応じてBCCは別のシートに記載された内容を使用するので、編集が楽です。
2. 必要な準備
- Excel VBAの有効化
Excel のオプションで、「マクロを含むファイルの実行を許可」を有効にしてください。
マクロ有効ブックとして保存するのも忘れずに! - PDF化するデータの作成
シート1にはPDF化したいデータを作成してください。
ここでは、以前作った在庫表のシートを使用します。シート名は「Sheet1」に設定してください。
詳しくはこちらExcelVBA~Excelデータを指定したファイルにPDF出力~ | 会う出版社 - メール情報の準備
Sheet2に以下の情報を入力してください。- B1: 宛先 (To)
- B2: CC (必要に応じて)
- B3: BCC(必要に応じて、現在はコメントアウトされています)
- B4: 件名
- B5: 本文
- Outlookの設定
Outlookがインストールされ、適切に設定されていることを確認してください。


3. 実行方法
以下のVBAコードを使用して、PDFをメールに添付して送信します。
VBAコード
Sub PDF化してメール送信()
Dim ws As Worksheet
Dim emailSheet As Worksheet
Dim pdfFileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim tempPDFPath As String
' 保存するシートの指定 (PDF化用)
Set ws = ThisWorkbook.Sheets("Sheet1") ' PDF化するシート名を指定
' メール情報が記載されたシートの指定
Set emailSheet = ThisWorkbook.Sheets("Sheet2")
' 一時PDFファイル名の設定
tempPDFPath = Environ("TEMP") & "\" & ws.Name & ".pdf" ' TEMPフォルダに一時保存
' PDFを一時保存
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=tempPDFPath, Quality:=xlQualityStandard
' Outlookアプリケーションの初期化
On Error Resume Next
Set OutlookApp = GetObject(class:="Outlook.Application")
If OutlookApp Is Nothing Then
Set OutlookApp = CreateObject(class:="Outlook.Application")
End If
On Error GoTo 0
If OutlookApp Is Nothing Then
MsgBox "Outlookがインストールされていません。", vbExclamation
Exit Sub
End If
' メール情報をSheet2から取得
Dim recipientTo As String, recipientCC As String, recipientBCC As String, subjectLine As String, emailBody As String
recipientTo = emailSheet.Range("B1").Value ' 宛先
recipientCC = emailSheet.Range("B2").Value ' CC
'recipientBCC = emailSheet.Range("B3").Value ' BCC(必要なら有効化)
subjectLine = emailSheet.Range("B4").Value ' 件名
emailBody = emailSheet.Range("B5").Value ' 本文
' メール作成
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = recipientTo
.CC = recipientCC
'.BCC = recipientBCC ' BCCを指定する場合はコメントアウトを解除
.Subject = subjectLine
.Body = emailBody
.Attachments.Add tempPDFPath ' PDFファイルを添付
.Display ' メールを表示(送信する場合は .Send に変更)
End With
' 一時ファイルの削除
On Error Resume Next
Kill tempPDFPath ' 一時保存したPDFを削除
On Error GoTo 0
' 後処理
Set OutlookMail = Nothing
Set OutlookApp = Nothing
MsgBox "PDFを一時的に作成し、メールに添付しました。", vbInformation
End Sub
4. 出力結果
- PDFの作成:
- 指定したシート (例: Sheet1) が一時的にPDFファイルとして生成されます。
- メール作成:
- Sheet2の情報に基づき、PDFが添付されたメールが作成されます。
- メール作成画面が表示され、内容を確認して手動で送信できます。
- PDFの削除:
- メール作成後、一時ファイルとして生成されたPDFは自動的に削除されます。

5. 注意事項
- Outlookの設定:
- PCにOutlookがインストールされ、正しく設定されている必要があります。
- 一時ファイルの削除:
- プロセスが中断した場合、一時ファイルが残る可能性があります。必要に応じてTEMPフォルダ内を手動で確認してください。
- BCCの使用:
- BCCを使用する場合は、
Sheet2のB3セルにBCCアドレスを入力し、コード内の.BCC行のコメントアウトを解除してください。
- BCCを使用する場合は、
- メール送信:
- 自動で送信する場合は、コード内の
.Displayを.Sendに変更してください。
- 自動で送信する場合は、コード内の

コメント