Excel VBA 逆引き集 | 添付ファイル抽出

Excel VBA
スポンサーリンク

外部連携 × 添付ファイル抽出(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メールの添付ファイルを自動保存・管理する処理 を簡単に作成できます。

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