外部連携 × 添付ファイル抽出(Outlook連携)
Excel VBAから Outlookの受信メールに含まれる添付ファイルを抽出して保存 する方法を紹介します。
初心者向けに、コード例やテンプレートをかみ砕いて説明します。
基本の考え方
- 添付ファイル抽出とは?
Outlookの受信メールから添付ファイルを取り出し、指定フォルダに保存する処理。 - 用途:
- 日次報告メールの添付Excelを自動保存
- 特定条件のメールから添付ファイルだけ抽出
- 添付ファイルをExcelで管理・分析
テンプレ1:受信トレイの全メールから添付ファイルを保存
Sub SaveAllAttachments()
Dim outlookApp As Object
Dim ns As Object
Dim inbox As Object
Dim mail As Object
Dim att As Object
Dim savePath As String
' 保存先フォルダ
savePath = "C:\temp\attachments\"
' Outlook起動
Set outlookApp = CreateObject("Outlook.Application")
Set ns = outlookApp.GetNamespace("MAPI")
Set inbox = ns.GetDefaultFolder(6) ' 6 = 受信トレイ
' 受信トレイのメールをループ
For Each mail In inbox.Items
If mail.Attachments.Count > 0 Then
For Each att In mail.Attachments
att.SaveAsFile savePath & att.FileName
Next att
End If
Next mail
MsgBox "受信トレイの添付ファイルを保存しました!"
End Sub
VB- ポイント:
mail.Attachments.Countで添付の有無を確認。att.SaveAsFileで指定フォルダに保存。
テンプレ2:最新メールの添付ファイルだけ保存
Sub SaveLatestMailAttachment()
Dim outlookApp As Object
Dim ns As Object
Dim inbox As Object
Dim mail As Object
Dim att As Object
Dim savePath As String
savePath = "C:\temp\attachments\"
Set outlookApp = CreateObject("Outlook.Application")
Set ns = outlookApp.GetNamespace("MAPI")
Set inbox = ns.GetDefaultFolder(6)
' 最新メールを取得
Set mail = inbox.Items.GetLast
' 添付ファイルを保存
If mail.Attachments.Count > 0 Then
For Each att In mail.Attachments
att.SaveAsFile savePath & att.FileName
Next att
End If
MsgBox "最新メールの添付ファイルを保存しました!"
End Sub
VB- ポイント:
Items.GetLastで最新メールを取得。- 日次報告メールなどに便利。
テンプレ3:特定条件のメールから添付ファイルを保存(件名に「報告」)
Sub SaveSpecificMailAttachments()
Dim outlookApp As Object
Dim ns As Object
Dim inbox As Object
Dim mail As Object
Dim att As Object
Dim savePath As String
savePath = "C:\temp\attachments\"
Set outlookApp = CreateObject("Outlook.Application")
Set ns = outlookApp.GetNamespace("MAPI")
Set inbox = ns.GetDefaultFolder(6)
' 条件に合うメールだけ処理
For Each mail In inbox.Items
If InStr(mail.Subject, "報告") > 0 Then
If mail.Attachments.Count > 0 Then
For Each att In mail.Attachments
att.SaveAsFile savePath & att.FileName
Next att
End If
End If
Next mail
MsgBox "件名に「報告」を含むメールの添付ファイルを保存しました!"
End Sub
VB- ポイント:
InStr(mail.Subject, "報告")で件名に「報告」が含まれるか判定。- 条件に合うメールだけ添付を保存。
テンプレ4:保存した添付ファイルをExcelに一覧化
Sub ListSavedAttachments()
Dim fso As Object, folder As Object, file As Object
Dim ws As Worksheet: Set ws = Worksheets("AttachmentList")
Dim savePath As String
Dim rowCount As Long
savePath = "C:\temp\attachments\"
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(savePath)
ws.Cells.Clear
ws.Range("A1").Value = "ファイル名"
ws.Range("B1").Value = "更新日時"
rowCount = 2
For Each file In folder.Files
ws.Cells(rowCount, 1).Value = file.Name
ws.Cells(rowCount, 2).Value = file.DateLastModified
rowCount = rowCount + 1
Next file
MsgBox "保存済み添付ファイルを一覧化しました!"
End Sub
VB- ポイント:
- 保存フォルダ内のファイルを一覧化。
- Excelで管理・確認できる。
例題で練習
'例1:受信トレイの全メールから添付ファイルを保存
'例2:最新メールの添付ファイルを保存
'例3:件名に「報告」を含むメールの添付ファイルを保存
'例4:保存済み添付ファイルをExcelに一覧化
VB初心者向けポイント
- Outlook.Applicationを作成して操作 → VBAからOutlookを呼び出す。
- Attachmentsコレクションを使う → 添付ファイルをループ処理。
- 条件抽出で必要なメールだけ処理 → 無駄な保存を防げる。
- Excelで一覧化すると管理しやすい → 実務で役立つ。
👉 この「外部連携 × 添付ファイル抽出テンプレ」を覚えておけば、Excel VBAで Outlookメールの添付ファイルを自動保存・管理する処理 を簡単に作成できます。
