広告

【VBA備忘録】特定の件名のメールを受信したときだけ添付ファイルを保存する(Outlook 編)

みなさん、こんにちは。

日々の業務の中で、
「このメールが来たら、必ず何か作業しないといけない」
そんなケース、意外と多くないでしょうか。

特に最近は、電子帳簿保存法の影響で、

  • 請求書メールに添付されたPDFを保存する
  • メール自体を証跡として残す

といった作業が増えたと感じています。

メールが来るたびに保存するの、正直めんどくさい

請求書メールが届いたら、

  1. Outlookを開く
  2. メールを探す
  3. 添付ファイルを保存
  4. 保存先を確認

…この作業を毎回手動でやるのは、
地味に面倒です。

しかも、

  • 保存し忘れる
  • 間違ったフォルダに保存する

といったミスも起こりがち。

Outlookなら「受信した瞬間に保存」もできる

実はOutlookでは、

特定の条件に合うメールを受信したときだけ、添付ファイルを自動で保存する

ということが、VBAで実現できます。

例えば、

  • 件名に「請求書」が含まれている
  • 特定の差出人からのメール

といった条件を指定して、保存処理を自動化できます。

メールが届いた瞬間に保存されるので、

  • 保存忘れがなくなる
  • 作業が発生しない
  • 電帳法対応の不安が減る

というメリットがあります。

件名に特定の文字が含まれていたら添付ファイルを保存するプログラム

前準備:参照設定の確認

まずは、VBAからOutlookを操作するための参照設定を確認します。

参照設定の手順

  1. Outlookを起動
  2. Alt + F11 または 開発タブ→Visual Basic で VBE(Visual Basic Editor)を開く
  3. メニューの [ツール] → [参照設定] をクリック
  4. 一覧から
    Microsoft Outlook xx.x Object Library
    にチェックを入れる
  5. [OK] をクリック

※ xx.x の部分は、環境によって16.0 や 15.0 など異なりますが、Outlookと書かれていれば問題ありません。

前準備:ThisOutlookSessionを開く

プロジェクト内のThisOutlookSessionを開いてコードを書く場所を準備します。

ダブルクリックすると真っ白なウインドウが表示されます。

コピペOK!コードを追加する

先ほど開いたThisOutlookSessionのウインドウにコピペして貼り付けてください。

その際

・保存先フォルダ⇒添付ファイルの保存フォルダ
・件名に含まれるキーワード

を任意の場所とキーワードに変更してください。

仕様

・件名に キーワード が含まれていれば処理完全一致ではないので
 キーワード「請求書」の場合
 👉「【請求書】2025年1月分」でもOK
・添付ファイルが複数あっても全て保存
・ファイル名は元メールのまま

注意点

・保存先フォルダはあらかじめ作成しておいてください。→ないとエラーになります。
・コードを保存したらOutlookを再起動しないと動きません。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

    Dim EntryIDs() As String
    Dim i As Long
    Dim mailItem As Object
    Dim att As Attachment
    Dim savePath As String
    Dim keyword As String

    ' 保存先フォルダ
    savePath = "C:\Invoice\"

    ' 件名に含まれるキーワード
    keyword = "請求書"

    ' 複数メール対応
    EntryIDs = Split(EntryIDCollection, ",")

    For i = LBound(EntryIDs) To UBound(EntryIDs)

        Set mailItem = Application.Session.GetItemFromID(EntryIDs(i))

        ' MailItemかどうかチェック
        If TypeName(mailItem) = "MailItem" Then

            ' 件名にキーワードが含まれているか
            If InStr(mailItem.Subject, keyword) > 0 Then

                ' 添付ファイルを保存
                For Each att In mailItem.Attachments
                    att.SaveAsFile savePath & att.FileName
                Next att

            End If
        End If

    Next i

End Sub

受信時に自動保存できるなら、「送信時」も自動化できたらさらに楽ですよね。

Excelで作成した請求書を、ワンクリックでPDF化してOutlookメールに添付する方法は
こちらの記事で解説しています。

VBAを体系的に学びたい方は、以下の教材もおすすめです。

効率化を目指すも何していいかわからない方!!VBAを勉強すると普段使っているExcelがめちゃくちゃ便利になります。

  • ・独学で圧倒的効率化めざしてるならこれ

  • ・1st stepなら12,000円でVBAの基礎講座がオンラインで受講できる!!!

    わからないところはチャットで聞けますよ~