【Outlook VBA】受信したメールの添付ファイルを指定フォルダへ保存する

Outlookの受信用フォルダを対象に添付ファイルを取り出したい場合はないでしょうか。

例えば月次ごとにフォルダが分かれていて、該当月フォルダの添付資料を取り出したいという時です。

そんな時、クリック一発でフォルダ内にある添付ファイルが取り出せたら効率がよいですよね。

今回は、

・受信メールフォルダのさらにサブフォルダにあるメールの添付ファイルを指定フォルダへ保存する方法

についてまとめます!

添付ファイル付きメールを格納するフォルダを作成する

以下のように第二階層目に添付用フォルダを作ります。


こんな感じでフォルダ名は用途に合わせて変更してください。

続いてマクロを実装しましょう。

マクロを設置する下準備をする。

以下を参考にVBAコードを配置する場所を表示させます。

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

マクロを登録する

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

「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] > [ThisOutlookSession] を開きます。

以下のサンプルコードをコピーします。

Sub 添付ファイル保存()

    Dim objInbox As Object
    Dim objFolder As Object
    Dim strPath As String
    Dim i As Long
     
     
    Set objInbox = GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    
    '添付ファイルがあるメールのフォルダを指定します。2階層以上ある場合は「.Folders.Item(<フォルダ名>)」を追加してください。
    Set objFolder = objInbox.Folders.Item("1.サブフォルダ").Folders.Item("1-1.サブフォルダ")
    
    '添付ファイルの保存先をパスで指定します。
    strPath = "C:\Users\extan\Documents\outlook_temp\"
     
    For Each objItem In objFolder.Items
        For i = 1 To objItem.Attachments.Count
            '添付ファイルに拡張子がある場合のみ処理します。
            If InStr(objItem.Attachments.Item(i), ".") <> 0 Then
                objItem.Attachments.Item(i).SaveAsFile strPath & objItem.Attachments.Item(i)
            End If
        Next i
    Next objItem
 
    Set objItem = Nothing
    Set objInbox = Nothing
    Set objFolder = Nothing
 
End Sub

VBEのコードエリアへ、コードを貼り付けて保存します。

マクロを実行する

早速添付ファイルが保存されるか確認をしてみましょう。

添付付きメールを二階層目の「1-1.サブフォルダ」へ移動します。

ソースコードを編集します。
添付ファイルがあるメールのフォルダを指定します。2階層以上ある場合は「.Folders.Item(<フォルダ名>)」を追加してください。

Set objFolder = objInbox.Folders.Item("1.サブフォルダ").Folders.Item("1-1.サブフォルダ")

添付ファイル保存先となるフォルダのパスを以下ソースコードの””内に指定します。

strPath = "C:\Users\extan\Documents\outlook_temp\"

タカヒロ
タカヒロ
パスの最後に「\」を付けるようにしてください。ない場合は添付ファイルは保存されません。

次にoutlook本体に戻り「開発」タブの「マクロ」>「添付ファイル」を押下します。

はい!添付ファイルが指定フォルダへ保存されましたね。

受信トレイ直下を指定し添付ファイルを保存する

これまでサブフォルダを指定してきましたが、次は受信トレイ直下を指定し添付ファイルを保存する方法についても説明をします。

変更箇所は以下の通りです。

■変更前

Set objFolder = objInbox.Folders.Item("1.サブフォルダ").Folders.Item("1-1.サブフォルダ")

■変更後

Set objFolder = objInbox

タカヒロ
タカヒロ
objInbox自体は受信トレイを指しますのでそのままオブジェクトにセットすれば受信トレイを対象にすることができます。

<追加>添付ファイルの上書き保存の回避、期間指定をする方法

添付ファイルの上書き保存の回避、期間指定をする方法について別記事にまとめました。
上書き保存をさせたくない場合は、ご参考頂きたくお願いいたします。

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

さいごに

いかがでしょうか。

今回は、

・受信メールフォルダのさらにサブフォルダにあるメールの添付ファイルを指定フォルダへ保存する方法

についてまとめました。

添付ファイルを手動で1件づつフォルダへドラッグアンドドロップするよりは手間はぐっと軽減されたかと思います。

このような自動化により普段の作業が楽になるばかりではなく資料を収集する場合にも有効ですね。

応用編としてはフォルダ指定先をyyymmddの日付フォルダを自動生成してその中に格納したり、添付ファイルリストと格納先へのハイパーリンクをExcelに出力したりとかいいかもしれません。



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

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








30 件のコメント

  • コピーさせて頂き、保存場所や添付メール場所も入力しましたが、保存が出来ませんでした。
    エラーも出ないで、動きがありません。
    何が間違えなのか分かりません。
    お教え頂きたくお願い申し上げます。

    Sub 添付ファイル保存()

    Dim objInbox As Object
    Dim objFolder As Object
    Dim strPath As String
    Dim i As Long

    Set objInbox = GetNamespace(“MAPI”).GetDefaultFolder(olFolderInbox)

    ‘添付ファイルの保存先をパスで指定します。2階層以上ある場合は「.Folders.Item(<フォルダ名>)」を追加してください。

    Set objFolder = objInbox.Folders. Item (“hc”).Folders. Item (“202210”)

    strPath = “‪C:\Users\tojon\Desktop\PDF\”‬‬

    For Each objItem In objFolder.Items

    For i = 1 To objItem.Attachments.Count

    ‘添付ファイルに拡張子がある場合のみ処理します。
    If InStr(objItem.Attachments.Item(i), “.”) 0 Then
    objItem.Attachments.Item(i).SaveAsFile strPath & objItem.Attachments.Item(i)

    End If
    Next i
    Next objItem

    Set objItem = Nothing
    Set objInbox = Nothing
    Set objFolder = Nothing

    End Sub

    • いつもご利用ありがとうございます。

      保存場所や添付メール場所を入力しても添付が保存できない件ですが、
      コードは問題なさそうです。

      ほかには、
      フォルダ指定がOutlookの実際の構成とあっていないことが考えられますので、
      ご確認いただきたくお願いいたします。

      また、古いメールは、Exchengeサーバ側に保管される場合があり、この場合、PCのOutlookには存在しないため取得はできません。
      “202210”と指定されているので、これに該当する可能性があり、お手数ですが、新規添付ファイル付きメールを該当フォルダに移動し、
      取得できるかご確認いただきたくお願いいたします。

  • コメントを残す

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

    CAPTCHA ImageChange Image