VBA

【VBA】ExcelシートをPDFに変換しメール送信【完全自動】

この記事では、VBAを使用してExcelシートをPDFに変換し、そのPDFファイルをGmailでメール送信する方法とOutlookで送信する方法を紹介します。事務職の方だと、こういった処理は頻繁にあると思うので、自動化すると良いと思います。
VBAからOutlookを利用するコードはよく紹介されていますが、Gmailを利用するコードを紹介している記事はほとんどないと思いますので、どちらが使い勝手が良いか検討して利用して下さい。

今回紹介するコードは完全に自動化されており、特定のシートに記載されたメールアドレスに対してメールを送信します。

Outlookアプリケーションを使用してメール送信

Sub ExportAndSendPDF()
    Dim ws As Worksheet
    Dim pdfFileName As String
    Dim emailAddresses As Range
    Dim outlookApp As Object
    Dim outlookMail As Object
    Dim i As Integer
    
    ' 変換対象のシートを設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' PDFファイルの保存先とファイル名を指定
    pdfFileName = ThisWorkbook.Path & "\" & "Sheet1.pdf"
    
    ' PDFに変換して保存
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFileName, Quality:=xlQualityStandard
    
    ' 送信先のアドレスを指定
    Set emailAddresses = ThisWorkbook.Sheets("EmailAddresses").Range("A1:A10") ' 送信先のアドレスが記載されたセルの範囲を指定
    
    ' Outlookアプリケーションを起動
    Set outlookApp = CreateObject("Outlook.Application")
    
    ' メール作成
    For i = 1 To emailAddresses.Rows.Count
        Set outlookMail = outlookApp.CreateItem(0)
        With outlookMail
            ' 件名と本文を設定
            .Subject = "PDFファイルの送信"
            .Body = "PDFファイルを添付して送信します。"
            
            ' 添付ファイルの追加
            .Attachments.Add pdfFileName
            
            ' 送信先のアドレスを設定
            .To = emailAddresses.Cells(i, 1).Value
            
            ' メールを送信
            .Send
        End With
    Next i
    
    ' Outlookアプリケーションを解放
    Set outlookApp = Nothing
    
    ' PDFファイルの削除
    Kill pdfFileName
    
    MsgBox "送信が完了しました。"
End Sub

ExcelシートをPDFに変換し、指定されたメールアドレスにそのPDFファイルを添付して送信する機能を実現します。以下は、コードの主な機能と注意点についての解説です。

解説

  1. 変換対象のシートを設定: ws オブジェクトを使用して、変換したいExcelシートを指定します。この例では、”Sheet1″ という名前のシートが対象です。
  2. PDFファイルの保存先とファイル名を指定: 変換されたPDFファイルの保存先とファイル名を指定します。ThisWorkbook.Path は現在のExcelファイルの保存場所を示し、ここに “Sheet1.pdf” というファイル名を付加して、保存先を指定します。
  3. PDFに変換して保存: ExportAsFixedFormat メソッドを使用して、指定されたシートをPDFに変換し、保存します。
  4. 送信先のアドレスを指定: emailAddresses オブジェクトを使用して、メール送信先のアドレスが記載されたセルの範囲を指定します。
  5. Outlookアプリケーションを起動: CreateObject("Outlook.Application") を使用して、Outlookアプリケーションを起動します。
  6. メール作成: 指定されたアドレスに対して、ループを使用してメールを作成し送信します。PDFファイルを添付し、件名と本文を設定します。
  7. Outlookアプリケーションを解放: メール送信が完了したら、Outlookアプリケーションを解放します。
  8. PDFファイルの削除: 送信が完了した後、作成されたPDFファイルを削除します。
  9. メッセージボックスの表示: 送信が完了したことをユーザーに通知するために、メッセージボックスを表示します。

注意点

  • Outlookのセキュリティ設定: Outlookのセキュリティ設定により、安全性の低いアプリからのアクセスがブロックされる場合があります。アカウントの設定から「安全性の低いアプリの許可」を有効にしてください。
  • 機密情報の保護: メールアドレスやパスワードなどの機密情報をコードに直接埋め込むことはセキュリティ上のリスクがあります。適切なセキュリティ対策を講じてください。

このVBAコードを実行すると、指定したシートがPDFに変換され、指定したアドレスにメールが送信されます。

GmailのSMTPサーバーを使用してメールを送信

Sub ExportAndSendPDF()
    Dim ws As Worksheet
    Dim pdfFileName As String
    Dim emailAddresses As Range
    Dim outlookApp As Object
    Dim outlookMail As Object
    Dim i As Integer
    
    ' 変換対象のシートを設定
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    ' PDFファイルの保存先とファイル名を指定
    pdfFileName = ThisWorkbook.Path & "\" & "Sheet1.pdf"
    
    ' PDFに変換して保存
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFileName, Quality:=xlQualityStandard
    
    ' 送信先のアドレスを指定
    Set emailAddresses = ThisWorkbook.Sheets("EmailAddresses").Range("A1:A10") ' 送信先のアドレスが記載されたセルの範囲を指定
    
    ' Outlookアプリケーションを起動
    Set outlookApp = CreateObject("Outlook.Application")
    
    ' メール作成
    For i = 1 To emailAddresses.Rows.Count
        Set outlookMail = outlookApp.CreateItem(0)
        With outlookMail
            ' 件名と本文を設定
            .Subject = "PDFファイルの送信"
            .Body = "PDFファイルを添付して送信します。"
            
            ' 添付ファイルの追加
            .Attachments.Add pdfFileName
            
            ' 送信先のアドレスを設定
            .To = emailAddresses.Cells(i, 1).Value
            
            ' GmailのSMTPサーバー設定
            .Configuration = "SMTP"
            .UseSAP = True
            .SMTPServer = "smtp.gmail.com"
            .SMTPPort = 587
            .SMTPAuthenticate = 1 ' 認証を行う場合は1、行わない場合は0
            .SMTPUser = "your-email@gmail.com" ' Gmailのメールアドレスを入力
            .SMTPPassword = "your-password" ' Gmailのパスワードを入力
            
            ' メールを送信
            .Send
        End With
    Next i
    
    ' Outlookアプリケーションを解放
    Set outlookApp = Nothing
    
    ' PDFファイルの削除
    Kill pdfFileName
    
    MsgBox "送信が完了しました。"
End Sub
  1. Excelシートの準備: まず、Excelブックを開き、送信したいシートに必要なデータを入力します。また、メールを受信するメールアドレスを別のシートに記入します。
  2. VBAコードの作成: ExcelのVBAエディタを開き、新しいモジュールを作成します。次に、先のVBAコードを記述します。
  3. コードの実行: VBAエディタを閉じ、Excelブックに戻ります。そこで、メニューバーから [開発] > [マクロ] を選択し、先程作成したマクロを実行します。
  4. 動作確認: マクロが実行され、PDFファイルが作成され、Gmailでメールが送信されることを確認します。

解説

このVBAコードは、指定されたExcelシートをPDFに変換し、指定されたメールアドレスにそのPDFファイルを添付して送信します。以下は、コードの主な機能についての説明です。

  • PDF変換: ExportAsFixedFormat メソッドを使用して、ExcelシートをPDFに変換します。
  • メール送信: Outlookアプリケーションを使用してメールを作成し、GmailのSMTPサーバーを使用してメールを送信します。メールの本文には任意のテキストが含まれますが、PDFファイルが添付されます。

注意事項

  • Gmailのセキュリティ設定により、安全性の低いアプリからのアクセスがブロックされる場合があります。アカウントの設定から「安全性の低いアプリの許可」を有効にしてください。
  • メールアドレスやパスワードなどの機密情報をコードに直接埋め込むことはセキュリティ上のリスクがあります。適切なセキュリティ対策を講じてください。

VBAでメール送信『応用サンプル』

VBAを使用してExcelシートをPDFに変換し、Outlookを通じてメールで送信するコードの応用的なサンプルです。このサンプルでは、PDFに変換する範囲を動的に指定し、メールの件名や本文をカスタマイズする方法も実装しています。

Sub ExportAndSendPDF()
    Dim ws As Worksheet
    Dim pdfFileName As String
    Dim outlookApp As Object
    Dim outlookMail As Object
    Dim emailSubject As String
    Dim emailBody As String
    Dim recipientRange As Range
    Dim recipientCell As Range
    
    ' PDFに変換する範囲を動的に指定する例として、アクティブシートを使用する
    Set ws = ActiveSheet
    
    ' PDFファイルの保存先とファイル名を設定
    pdfFileName = ThisWorkbook.Path & "\" & "ExportedSheet.pdf"
    
    ' PDFに変換して保存
    ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFileName, Quality:=xlQualityStandard
    
    ' Outlookアプリケーションを起動
    Set outlookApp = CreateObject("Outlook.Application")
    
    ' メールの件名と本文を設定
    emailSubject = "Weekly Report"
    emailBody = "Please find the attached PDF file."
    
    ' 送信先のアドレスを指定するためのセル範囲を設定
    Set recipientRange = ThisWorkbook.Sheets("EmailRecipients").Range("A1:A10") ' 送信先のアドレスが記載されたセル範囲を指定
    
    ' 送信先のアドレスごとにメールを作成し、送信する
    For Each recipientCell In recipientRange
        If recipientCell.Value <> "" Then ' 空のセルをスキップする
            ' メール作成
            Set outlookMail = outlookApp.CreateItem(0)
            With outlookMail
                ' 件名と本文を設定
                .Subject = emailSubject
                .Body = emailBody
                
                ' PDFファイルを添付
                .Attachments.Add pdfFileName
                
                ' 送信先のアドレスを設定
                .To = recipientCell.Value
                
                ' メールを送信
                .Send
            End With
        End If
    Next recipientCell
    
    ' Outlookアプリケーションを解放
    Set outlookApp = Nothing
    
    ' PDFファイルを削除
    Kill pdfFileName
    
    MsgBox "PDF file exported and emails sent successfully."
End Sub

このサンプルでは、以下の点が特徴です。

  1. PDFに変換する範囲を動的に指定:アクティブなシートを使用してPDFに変換する範囲を動的に指定しています。
  2. メールの件名と本文をカスタマイズ:メールの件名と本文を変数に格納し、任意の内容にカスタマイズすることができます。
  3. 送信先のアドレスを動的に指定:「EmailRecipients」というシートに記載された送信先のアドレスを動的に取得し、それぞれのアドレスにメールを送信します。
  4. 空のセルをスキップ:送信先のアドレスが空の場合は、そのセルをスキップして次のセルに進みます。

このVBAコードを実行すると、指定した範囲のシートがPDFに変換され、指定した送信先のアドレスにメールが送信されます。メールの件名や本文はカスタマイズ可能であり、送信先のアドレスは動的に指定することができます。

まとめ

この記事では、ExcelシートをPDFに変換し、Gmailでメール送信する方法について説明しました。この自動化されたプロセスは、日常業務でのタスクを効率化し、作業時間を節約するのに役立ちます。今回紹介したコードを日常の業務に合わせてカスタマイズして業務の効率化に役立てて下さい。