【Outlook VBA】受信トレイの添付ファイルを一括保存する方法!期間指定も!

Outlookで受信トレイの添付ファイルを一括保存したいときはないでしょうか。

けど、そんな中で悩むことは、

・Outlookで受信トレイの添付ファイルを一括保存したいが方法がわからない。
・Outlookで受信トレイの添付ファイルを期間指定した上で一括保存したいが方法がわからない。
・Outlookで受信トレイの添付ファイルを一括保存する際に上書きされないようにしたいが方法がわからない。

ですよね。

今回はそんなお悩みを解決する

・Outlookで受信トレイの添付ファイルを一括保存する方法
・Outlookで受信トレイの添付ファイルを期間指定した上で一括保存する方法
・Outlookで受信トレイの添付ファイルを一括保存する際に上書きしないようにする方法

についてまとめます!

Outlookで受信トレイの添付ファイルを一括保存するイメージ

Outlookで受信トレイの添付ファイルを一括保存するイメージについて説明をします。

まずは、Outlookの受信トレイにある添付ファイル付きのメールがあるか確認をします。

VBAをOutlook側へ実装し、保存先となるフォルダのパスを指定します。

また受信トレイのメールアイテムが多くあり、抽出対象を絞りたいときは期間を指定します。

VBAを実行すると、

指定期間分の添付ファイルが指定フォルダへ保存されます!

さらに同じ名前の添付ファイルがあった場合は連番を付け上書き保存されないようにもできます!

大量の添付ファイルを取得したいときに便利ですね!
早速試してみましょう。

Outlookの受信トレイにある添付ファイル付きのメールを確認する

Outlookの受信トレイにある添付ファイル付きのメールを確認しましょう。

サンプルは以下の通りです。

それぞれ同じ名前の添付ファイルが付いています。

Outlook受信トレイの添付ファイルを一括保存するVBA_期間指定版

VBAの準備

Outlook受信トレイの添付ファイルを一括保存するVBA(期間指定版)の実装方法について説明をします。

今回のサンプルコードは以下の通りです。

Sub 受信トレイの添付ファイルを一括保存_期間絞り込み()
    Dim olApp As Application
    Dim objInbox As Object
    Dim objFolder As Object
    Dim objItem As Object
    Dim objConItems
    Dim strPath As String
    Dim i As Long
    Dim j As Long
    Dim strStart As String
    Dim strEnd As String
    Dim strFileName As String
     
     
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの受信トレイを取得します。
    Set olApp = New Outlook.Application
    Set objFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    Set objConItems = objFolder.Items
    
    '添付ファイルの保存先をパスで指定します。
    strPath = "F:\test\添付ファイル\"

    '開始日と終了日を指定します。
    strStart = Format("2022/2/1 00:00", "yyyy/mm/dd hh:nn")  '開始日を指定
    strEnd = Format("2022/6/16 17:00", "yyyy/mm/dd hh:nn")  '終了日を指定

    'Restrictメソッドで期間指定して抽出するメールアイテムを絞り込みます。
    Set objConItems = objConItems.Restrict("[ReceivedTime] >= '" & strStart & "' And [ReceivedTime] <= '" & strEnd & "'")
 
    'アイテム数分処理を繰り返します。
    For Each objItem In objConItems
        For i = 1 To objItem.Attachments.Count
            
            '添付ファイル名を変数へ代入します。
            strFileName = objItem.Attachments.Item(i)
            
            '添付ファイルに拡張子がある場合のみ処理します。
            If InStr(strFileName, ".") <> 0 Then
                'ファイルを書き出します。
                objItem.Attachments.Item(i).SaveAsFile strPath & objItem.Attachments.Item(i)
            End If
        Next i
    Next objItem
 
    'オブジェクトを解放します。
    Set olApp = Nothing
    Set objFolder = Nothing
    Set objConItems = Nothing
    Set objItem = Nothing
    
    
    MsgBox "Outlook受信トレイの添付ファイル出力が完了しました!", vbInformation
    
End Sub

VBAの設定

VBAの設定箇所は以下の通りです。

添付ファイルの保存先をパスで指定します。

strPath = "F:\test\添付ファイル\"

タカヒロ
タカヒロ
パスの最後に「\」を付けるようにしてください。

抽出期間の開始日と終了日を指定します。
時間指定もできます。

strStart = Format("2022/2/1 00:00", "yyyy/mm/dd hh:nn") '開始日を指定
strEnd = Format("2022/6/16 17:00", "yyyy/mm/dd hh:nn") '終了日を指定

VBAの実装

「VBAの実装手順」をご参照ください。

VBAの実行

VBAを実行してみましょう。

「Outlook受信トレイの添付ファイル出力が完了しました!」と表示されたら完了です。

保存先のフォルダを見てみましょう。

はい、添付ファイルが保存されていますね!

タカヒロ
タカヒロ
今回は3つのメールすべて同じ名前の添付ファイルであるため、上書きされる形となります。
次の章では上書きせず、リネームして保存する方法について載せていますので上書きしたくない方はこちらもご参照ください。

VBAの説明

Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの受信トレイを取得します。

Set olApp = New Outlook.Application
Set objFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
Set objConItems = objFolder.Items

Restrictメソッドで期間指定して抽出するメールアイテムを絞り込みます。

Set objConItems = objConItems.Restrict("[ReceivedTime] >= '" & strStart & "' And [ReceivedTime] <= '" & strEnd & "'")

アイテム数分処理を繰り返します。

For Each objItem In objConItems
For i = 1 To objItem.Attachments.Count

添付ファイル名を変数へ代入します。

strFileName = objItem.Attachments.Item(i)

添付ファイルに拡張子がある場合のみ処理します。

If InStr(strFileName, ".") <> 0 Then

ファイルを書き出します。

objItem.Attachments.Item(i).SaveAsFile strPath & objItem.Attachments.Item(i)

Outlook受信トレイの添付ファイルを上書きしないで一括保存するVBA

VBAの準備

Outlook受信トレイの添付ファイルを上書きしないで一括保存するVBA(期間指定版)の実装方法について説明をします。

サンプルコードは以下の通りです。

Sub 受信トレイの添付ファイルを一括保存_期間絞り込み_上書き回避()
    Dim olApp As Application
    Dim objInbox As Object
    Dim objFolder As Object
    Dim objItem As Object
    Dim objConItems
    Dim strPath As String
    Dim i As Long
    Dim j As Long
    Dim strStart As String
    Dim strEnd As String
    Dim strFileName As String
     
     
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの受信トレイを取得します。
    Set olApp = New Outlook.Application
    Set objFolder = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    Set objConItems = objFolder.Items
    
    '添付ファイルの保存先をパスで指定します。
    strPath = "F:\test\添付ファイル\"

    '開始日と終了日を指定します。
    strStart = Format("2022/2/1 00:00", "yyyy/mm/dd hh:nn")  '開始日を指定
    strEnd = Format("2022/6/16 17:00", "yyyy/mm/dd hh:nn")  '終了日を指定

    'Restrictメソッドで期間指定して抽出するメールアイテムを絞り込みます。
    Set objConItems = objConItems.Restrict("[ReceivedTime] >= '" & strStart & "' And [ReceivedTime] <= '" & strEnd & "'")
 
    'アイテム数分処理を繰り返します。
    For Each objItem In objConItems
        For i = 1 To objItem.Attachments.Count
            
            '添付ファイル名を変数へ代入します。
            strFileName = objItem.Attachments.Item(i)
            
            '添付ファイルに拡張子がある場合のみ処理します。
            If InStr(strFileName, ".") <> 0 Then
                
                'フルパスが存在しない場合のみファイルを書き出します。
                If Dir(strPath & strFileName) = "" Then
                   objItem.Attachments.Item(i).SaveAsFile strPath & objItem.Attachments.Item(i)
                Else
                    j = 1
                    '重複していたら保存ファイル名の先頭に(**)をつけます。
                    Do While Dir(strPath & strFileName) <> ""
                        strFileName = "(" & j & ")" & objItem.Attachments.Item(i)
                        j = j + 1
                    Loop
                    objItem.Attachments.Item(i).SaveAsFile strPath & strFileName

                End If
            End If
        Next i
    Next objItem
 
    'オブジェクトを解放します。
    Set olApp = Nothing
    Set objFolder = Nothing
    Set objConItems = Nothing
    Set objItem = Nothing
    
    
    MsgBox "Outlook受信トレイの添付ファイル出力が完了しました!", vbInformation
    
End Sub

VBAの設定

VBAの設定箇所は以下の通り前回と同じ内容を設定します。

添付ファイルの保存先をパスで指定します。

strPath = "F:\test\添付ファイル\"

タカヒロ
タカヒロ
パスの最後に「\」を付けるようにしてください。

抽出期間の開始日と終了日を指定します。
時間指定もできます。

strStart = Format("2022/2/1 00:00", "yyyy/mm/dd hh:nn") '開始日を指定
strEnd = Format("2022/6/16 17:00", "yyyy/mm/dd hh:nn") '終了日を指定

VBAの実行

VBAを実行してみましょう。

「Outlook受信トレイの添付ファイル出力が完了しました!」と表示されたら完了です。

保存先のフォルダを見てみましょう。

はい、添付ファイルが上書きせずれ連番付きでリネームされて保存されていますね!

VBAの説明

前回のVBAに上書きささせないよう処理を追加していますので、その部分について説明をします。

Dir(strPath & strFileName)で判定し、フルパスが存在しない場合のみファイルを書き出します。

If Dir(strPath & strFileName) = "" Then
objItem.Attachments.Item(i).SaveAsFile strPath & objItem.Attachments.Item(i)

重複していたら保存ファイル名の先頭に(**)をつけ添付ファイルを保存します。

Do While Dir(strPath & strFileName) <> ""
strFileName = "(" & j & ")" & objItem.Attachments.Item(i)
j = j + 1
Loop
objItem.Attachments.Item(i).SaveAsFile strPath & strFileName

タカヒロ
タカヒロ
リネームをせず、上書きだけ回避したい場合はこの処理を省くようにしてください。

VBAの実装手順

VBAを設置する下準備をする

VBAを設置するための下準備をしましょう。

「開発」タブがリボンメニューにない場合は
以下を参考に表示させます。

Outlook VBAをはじめよう!初心者向け手引き

VBAを登録する

次にマクロを登録します。

「開発」タブ>「Visual Basic」を押します。

「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] > [ThisOutlookSession] を開き、こちらにコードを貼り付けます。

こちらで実装完了です。

VBAを実行する

VBAを実行する手順となります。
①「開発」タブの「VBA」をクリックし実行したいマクロを選択し、「実行」をクリックします。

②処理がされたことが確認できれば完了です。

さいごに

いかがでしょうか。

今回は、
【Outlook VBA】受信トレイの添付ファイルを一括保存する方法!期間指定も!について
まとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

タカヒロ
実質無料で読めるExcelVBA本についてまとめました。
もしVBA本購入を検討されていたら、どれだけお得か確かめてみてください。

【¥0】実質無料のExcelVBAおすすめ本25選!初級~中級まで網羅!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です