Outlookで特定フォルダの添付ファイルを自動保存するVBAの作り方

メールの添付ファイルを毎回手動で保存するのは、意外と手間がかかります。
特に、特定の送信者やプロジェクトごとにフォルダを分けて管理している場合、「自動で添付ファイルを保存できたらいいのに」と感じたことはありませんか?

この記事では、Outlookの特定フォルダに届いたメールの添付ファイルを自動で指定フォルダに保存するVBAの作り方を、初心者にもわかりやすく解説します。
コピペでそのまま使えるサンプルコード付きなので、業務効率化を進めたい方におすすめです。


Outlook VBAで添付ファイルを自動保存する仕組みとは

Outlookには「VBA(Visual Basic for Applications)」という機能が標準で搭載されています。
VBAを使うと、Outlookの動作を自動化したり、受信メールの内容に応じて処理を行ったりすることができます。

今回の目的は次の通りです。

  • 特定のOutlookフォルダ(例:受信トレイ内の「請求書」フォルダ)を対象とする
  • そのフォルダにあるメールの添付ファイルを一括保存する
  • 保存先のパスを自由に指定できる

つまり、業務上の「請求書」「見積書」「納品書」などを自動的に整理して保管できるというわけです。


VBAを使う準備:開発タブの表示とVBAエディタの起動方法

まずはVBAを実行できるように環境を整えましょう。

  1. Outlookを開く
  2. 上部のリボンで「ファイル」→「オプション」をクリック
  3. 「リボンのユーザー設定」を選び、「開発」タブにチェックを入れる
  4. 「OK」を押す

これで上部メニューに「開発」タブが追加されます。

次に、
「開発」→「Visual Basic」をクリックしてVBAエディタを開きます。

VBAエディタが起動したら、左側の「Microsoft Outlook Objects」内の「ThisOutlookSession」または「標準モジュール」を開き、コードを記述できる状態にします。


基本コード:特定フォルダの添付ファイルを保存するVBA

以下のサンプルコードをそのまま貼り付けて使えます。
保存先パスやフォルダ名は任意に変更してください。

Sub SaveAttachmentsFromSpecificFolder()
    Dim ns As Outlook.Namespace
    Dim targetFolder As Outlook.Folder
    Dim itm As Object
    Dim atmt As Attachment
    Dim savePath As String
    Dim fileName As String
    
    ' 保存先フォルダのパスを指定
    savePath = "C:\Users\Public\Documents\OutlookAttachments\"
    
    ' Outlook内の特定フォルダを指定(例:受信トレイ → 請求書)
    Set ns = Application.GetNamespace("MAPI")
    Set targetFolder = ns.GetDefaultFolder(olFolderInbox).Folders("請求書")
    
    ' 保存処理
    For Each itm In targetFolder.Items
        If itm.Attachments.Count > 0 Then
            For Each atmt In itm.Attachments
                fileName = savePath & Format(itm.ReceivedTime, "yyyymmdd_") & atmt.FileName
                atmt.SaveAsFile fileName
            Next atmt
        End If
    Next itm
    
    MsgBox "保存が完了しました!", vbInformation
End Sub

ポイント解説

  • GetDefaultFolder(olFolderInbox):受信トレイを取得します
  • .Folders("請求書"):受信トレイ内のサブフォルダ名を指定します
  • savePath:添付ファイルを保存するローカルパスを設定します
  • Format(itm.ReceivedTime, "yyyymmdd_"):メール受信日をファイル名の先頭に追加します

応用例:送信者別にフォルダを分けて保存する

同じフォルダでも、送信者ごとにサブフォルダを自動で作って整理したい場合は、以下のように改良します。

Sub SaveAttachmentsBySender()
    Dim ns As Outlook.Namespace
    Dim targetFolder As Outlook.Folder
    Dim itm As Object
    Dim atmt As Attachment
    Dim savePath As String
    Dim senderName As String
    Dim filePath As String
    
    savePath = "C:\Users\Public\Documents\OutlookAttachments\"
    Set ns = Application.GetNamespace("MAPI")
    Set targetFolder = ns.GetDefaultFolder(olFolderInbox).Folders("請求書")
    
    For Each itm In targetFolder.Items
        If itm.Class = olMail Then
            If itm.Attachments.Count > 0 Then
                senderName = Replace(itm.SenderName, " ", "_")
                If Dir(savePath & senderName, vbDirectory) = "" Then
                    MkDir savePath & senderName
                End If
                
                For Each atmt In itm.Attachments
                    filePath = savePath & senderName & "\" & Format(itm.ReceivedTime, "yyyymmdd_") & atmt.FileName
                    atmt.SaveAsFile filePath
                Next atmt
            End If
        End If
    Next itm
    
    MsgBox "送信者別に保存が完了しました。", vbInformation
End Sub

このコードでは、メールの送信者名をサブフォルダ名として作成し、自動で分類します。
営業部や取引先別の管理にも非常に便利です。


自動実行したい場合:Outlook起動時に処理を走らせる方法

手動実行だけでなく、Outlookを開いたときに自動で添付ファイルを保存したい場合は、「ThisOutlookSession」に以下のようなコードを追加します。

Private Sub Application_Startup()
    Call SaveAttachmentsFromSpecificFolder
End Sub

これにより、Outlookを起動するたびに自動で保存処理が実行されます。
ただし、Outlook起動時の処理速度に影響する可能性があるため、フォルダ内のメール数が多い場合は注意しましょう。


よくあるエラーと対処法

1. 「オブジェクトが設定されていません」エラー

→ 指定したフォルダ名が間違っている可能性があります。
「請求書」などのフォルダ名が実際のOutlook上と完全に一致しているか確認してください。

2. 「ファイルを保存できません」

→ 保存先フォルダが存在しない場合は、あらかじめ手動で作成しておくか、MkDir関数を使って自動作成するようにします。

3. マクロが実行できない

→ セキュリティ設定でVBAがブロックされていることがあります。
Outlookの「マクロのセキュリティ設定」を「通知してすべてのマクロを無効化」に変更しておくと、都度許可が出せます。


セキュリティ上の注意点

Outlook VBAを使用する際は、以下の点に注意してください。

  • 不明なマクロを有効化しない
  • 添付ファイルの自動保存先はウイルススキャン対象にする
  • ネットワークドライブを保存先に指定する場合はアクセス権限を確認する

業務利用では、セキュリティポリシーに沿った設定を行うことが重要です。


まとめ:Outlook VBAで添付ファイル管理を自動化しよう

手動での添付ファイル保存は時間のムダになりがちです。
VBAを使えば、たった1回の設定で、Outlook内の特定フォルダに届くメールの添付ファイルを自動保存できます。

この記事のポイントをおさらいします。

  • VBAを使えばOutlook内の作業を自動化できる
  • 特定フォルダや送信者ごとに添付ファイルを整理できる
  • セキュリティ設定と保存先管理を忘れずに行う

この仕組みを導入することで、毎日の事務処理が劇的に効率化されます。
ぜひ、この記事のコードを活用して業務の自動化にチャレンジしてみてください。

タイトルとURLをコピーしました