【Outlook】Outlookの送信メールをPDF形式で自動保存するルール設定と業務効率化

【Outlook】Outlookの送信メールをPDF形式で自動保存するルール設定と業務効率化
🛡️ 超解決

Outlookで送信したメールを、後で確認しやすいPDF形式で自動保存したいですか?

取引先とのやり取りや社内承認プロセスで、送信済みメールの記録は非常に重要です。

しかし、手動で一つずつPDF化するのは手間がかかり、見落としのリスクもあります。

この記事では、Outlookのルール機能を使って、送信メールを自動的にPDF形式で保存する方法を解説します。

この設定を行うことで、メール管理の手間を大幅に削減し、業務効率を向上させることができます。

【要点】Outlook送信メールをPDFで自動保存する設定

  • Outlookのルール機能: 送信済みアイテムに移動したメールをトリガーに自動処理を実行します。
  • VBAマクロの利用: PDF保存というOutlook標準機能にない処理を実現するために、VBAマクロを記述・設定します。
  • 自動保存設定: 作成したルールとVBAマクロを連携させ、送信メールをPDFとして指定フォルダに保存します。

ADVERTISEMENT

Outlookの送信メール自動PDF保存の仕組み

Outlookで送信したメールをPDF形式で自動保存するには、Outlookの標準機能だけでは実現できません。

Outlookには、受信メールに対して自動的にフォルダ分けしたり、フラグを付けたりする「ルール」機能があります。

しかし、このルール機能には、メールをPDFとして保存する直接的なアクションが存在しません。

そこで、この課題を解決するために、Visual Basic for Applications (VBA) というプログラミング言語を利用します。

VBAマクロを作成し、Outlookのルールと連携させることで、送信メールが「送信済みアイテム」フォルダに入った際に、自動的にPDFファイルとして指定した場所に保存されるように仕向けます。

お探しの解決策が見つからない場合は、こちらの「Teams/Outlookトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

送信メールをPDFで自動保存するためのVBAマクロ設定手順

この機能を実現するには、VBAマクロの記述と、それを呼び出すOutlookルールの作成が必要です。

組織によっては、VBAマクロの利用がセキュリティポリシーで制限されている場合があります。事前にIT管理者にご確認ください。

VBAエディタを開く

まず、OutlookでVBAエディタを開く準備をします。

  1. Outlookを開く
    Microsoft Outlookを起動します。
  2. 開発タブを表示する
    Outlookのメニューバーに「開発」タブが表示されていない場合は、以下の手順で表示させます。
    1. 「ファイル」タブをクリックします。
    2. 「オプション」を選択します。
    3. 「Outlookのオプション」ウィンドウで、「リボンのユーザー設定」をクリックします。
    4. 右側の「メインタブ」の一覧で、「開発」にチェックを入れ、「OK」をクリックします。
  3. VBAエディタを起動する
    「開発」タブが表示されたら、「Visual Basic」ボタンをクリックします。

PDF保存用VBAマクロの記述

VBAエディタが開いたら、以下のコードを記述します。

  1. 標準モジュールの挿入
    VBAエディタの左側にあるプロジェクトエクスプローラーで、「VBAProject (VbaProject.OTM)」などの項目を右クリックします。
    「挿入」→「標準モジュール」を選択します。
  2. マクロコードの貼り付け
    新しく表示されたモジュールウィンドウに、以下のコードをコピーして貼り付けます。

    【重要】
    以下のコードの ‘C:\Users\YourUsername\Documents\OutlookSentPDFs’ の部分は、PDFファイルを保存したい実際のフォルダパスに変更してください。
    例: ‘D:\MailArchives\SentPDF\’
    フォルダが存在しない場合は、事前に作成しておく必要があります。

Sub SaveSentMailAsPDF()
Dim olApp As Outlook.Application
Dim olNs As Outlook.Namespace
Dim olFolder As Outlook.MAPIFolder
Dim olItem As Object
Dim olMail As Outlook.MailItem
Dim pdfPath As String
Dim folderPath As String
Dim fileName As String
Dim saveFolder As String

' PDF保存先フォルダを設定 (必ずご自身の環境に合わせて変更してください)
saveFolder = "C:\Users\YourUsername\Documents\OutlookSentPDFs\"

' フォルダが存在しない場合は作成
If Dir(saveFolder, vbDirectory) = "" Then
MkDir saveFolder
End If

Set olApp = Outlook.Application
Set olNs = olApp.GetNamespace("MAPI")
' 送信済みアイテムフォルダを指定
Set olFolder = olNs.GetDefaultFolder(olFolderSentMail)

' 新しく送信されたメール(未処理のもの)を処理
' ここでは、送信日時が直近のものを対象にするなどの工夫が必要になる場合がある
' 簡単のため、ここでは直近のメールを処理する例を示します。
' より厳密には、処理済みのフラグを付けるなどの仕組みが必要です。

' 例: 送信済みアイテムフォルダ内の最後のメールを処理
If olFolder.Items.Count > 0 Then
Set olItem = olFolder.Items(olFolder.Items.Count) ' 最新のアイテム

If TypeOf olItem Is MailItem Then
Set olMail = olItem

' 既にPDF保存済みかどうかのチェック (例: 件名に印をつけるなど)
' ここでは省略しますが、重複保存を防ぐための仕組みを検討してください。

' ファイル名を作成 (例: 送信日時_件名)
fileName = Format(olMail.SentOn, "yyyy-mm-dd_hhmmss") & "_" & ReplaceInvalidChars(olMail.Subject)
pdfPath = saveFolder & fileName & ".pdf"

' メールをPDFとして保存
olMail.SaveAs pdfPath, olMSG
' olMSG はOutlookメッセージ形式ですが、PDFとして保存するには追加のCOMライブラリや
' Wordなどのアプリケーション連携が必要になります。標準機能のみでは直接PDF保存はできません。
' 以下のコードは、Wordを介してPDF保存する例です。

Dim objWord As Object
Dim doc As Object

On Error Resume Next
' Wordアプリケーションオブジェクトを作成
Set objWord = GetObject(, "Word.Application")
If objWord Is Nothing Then
Set objWord = CreateObject("Word.Application")
End If
On Error GoTo 0

If Not objWord Is Nothing Then
' メールの内容をWord文書にコピー
Dim tempDoc As Object
Set tempDoc = objWord.Documents.Add

' メールの本文と添付ファイル情報をWordに書き出す(簡易版)
' 実際には、HTML形式の本文や添付ファイルの扱いにはより複雑な処理が必要です。
tempDoc.Content.InsertAfter "件名: " & olMail.Subject & vbCrLf
tempDoc.Content.InsertAfter "送信先: " & olMail.To & vbCrLf
tempDoc.Content.InsertAfter "CC: " & olMail.CC & vbCrLf
tempDoc.Content.InsertAfter "BCC: " & olMail.BCC & vbCrLf
tempDoc.Content.InsertAfter "日時: " & Format(olMail.SentOn, "yyyy/mm/dd hh:mm:ss") & vbCrLf
tempDoc.Content.InsertAfter vbCrLf & olMail.Body

' PDFとしてエクスポート
' PDF/XPS ドキュメントへのエクスポート機能が有効になっている必要があります
' (Wordのバージョンや設定によります)
' FileFormat:=wdFormatPDF (17) は PDF 形式を表します
tempDoc.ExportAsFixedFormat OutputFileName:=pdfPath, ExportFormat:=wdFormatPDF

' Word文書を閉じる
tempDoc.Close SaveChanges:=False
' Wordアプリケーションを終了 (必要に応じて)
' objWord.Quit
Else
MsgBox "Wordアプリケーションを起動できませんでした。PDF保存をスキップします。", vbExclamation
End If
Set objWord = Nothing
Set tempDoc = Nothing

' 処理済みの印を付ける (例: 件名に[PDF]を追加)
' これにより、次回以降の実行で重複処理を防ぐことができます。
' ただし、この方法は件名が変更されると機能しなくなります。
' より確実な方法としては、カスタムプロパティや別のフォルダへの移動などが考えられます。
On Error Resume Next ' 件名変更などのエラーを無視
olMail.Subject = "[PDF] " & olMail.Subject
olMail.Save ' 変更を保存
On Error GoTo 0

MsgBox "送信メール " & olMail.Subject & " をPDFで保存しました: " & pdfPath, vbInformation
End If
End If

Set olMail = Nothing
Set olItem = Nothing
Set olFolder = Nothing
Set olNs = Nothing
Set olApp = Nothing

End Sub

' ファイル名に使用できない文字を置換する関数
Function ReplaceInvalidChars(str As String) As String
Dim invalidChars As String
Dim i As Integer
Dim char As String

invalidChars = "\/:*?""<>|"
ReplaceInvalidChars = str

For i = 1 To Len(invalidChars)
char = Mid(invalidChars, i, 1)
ReplaceInvalidChars = Replace(ReplaceInvalidChars, char, "_")
Next i
End Function

' WordのPDFエクスポート定数 (wdFormatPDF)
Const wdFormatPDF = 17

👥
Teams/Outlookトラブル完全解決データベース サインイン、接続エラー、メール送受信の不具合など、特有のトラブル解決策を網羅。困った時の逆引きに活用してください。

ADVERTISEMENT

この記事の監修者
🌐

超解決 リモートワーク研究班

Microsoft 365の導入・保守を専門とするエンジニアグループ。通信障害やサインイン不具合など、ビジネスインフラのトラブル対応に精通しています。