メールの添付ファイルを毎回手動で保存するのは、意外と手間がかかります。
特に、特定の送信者やプロジェクトごとにフォルダを分けて管理している場合、「自動で添付ファイルを保存できたらいいのに」と感じたことはありませんか?
この記事では、Outlookの特定フォルダに届いたメールの添付ファイルを自動で指定フォルダに保存するVBAの作り方を、初心者にもわかりやすく解説します。
コピペでそのまま使えるサンプルコード付きなので、業務効率化を進めたい方におすすめです。
Outlook VBAで添付ファイルを自動保存する仕組みとは
Outlookには「VBA(Visual Basic for Applications)」という機能が標準で搭載されています。
VBAを使うと、Outlookの動作を自動化したり、受信メールの内容に応じて処理を行ったりすることができます。
今回の目的は次の通りです。
- 特定のOutlookフォルダ(例:受信トレイ内の「請求書」フォルダ)を対象とする
- そのフォルダにあるメールの添付ファイルを一括保存する
- 保存先のパスを自由に指定できる
つまり、業務上の「請求書」「見積書」「納品書」などを自動的に整理して保管できるというわけです。
VBAを使う準備:開発タブの表示とVBAエディタの起動方法
まずはVBAを実行できるように環境を整えましょう。
- Outlookを開く
- 上部のリボンで「ファイル」→「オプション」をクリック
- 「リボンのユーザー設定」を選び、「開発」タブにチェックを入れる
- 「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内の作業を自動化できる
- 特定フォルダや送信者ごとに添付ファイルを整理できる
- セキュリティ設定と保存先管理を忘れずに行う
この仕組みを導入することで、毎日の事務処理が劇的に効率化されます。
ぜひ、この記事のコードを活用して業務の自動化にチャレンジしてみてください。