こんな人にオススメの記事です
- 受信したメールの添付ファイルを自動ですべて保存したい人
- OutlookでVBAを使ってみたい人
- Outlookを使った業務の効率化を検討している人
この記事では、マクロを使ってOutlookで受信したメールの添付ファイルを自動的に所定のフォルダー内に保存する方法を初心者にもわかりやすく、丁寧に解説していきます。
Outlookのマクロを使う事前準備その1 すべてのマクロを有効にする
まずはOutlookで自作したマクロの実行を許可するように設定していきます。
Outlookを起動し、左上にある[ファイル]をクリックしてください。
[ファイル]をクリックすると「アカウント情報」と大きく書かれた画面に移動します。
その中の[オプション]をクリックしてください。
[オプション]をクリックすると「Outlookのオプション」と書かれたウィンドウが立ち上がります。
そのウィンドウの左側にある[トラストセンター]をクリックしてください。
[トラストセンター]をクリックすると「セキュリティと詳細情報」を書かれた画面に移動します。
その中にある[トラストセンターの設定]と書かれたボタンをクリックしてください。
[トラストセンターの設定]と書かれたボタンをクリックすると「トラストセンター」が立ち上がります。
その画面の左側メニューにある[マクロの設定]をクリックしてください。
[マクロの設定]をクリックすると「マクロの設定」と書かれた画面に移動します。
その中にある[すべてのマクロを有効にする]にチェックを入れてください。
次に右下にある[OK]をクリックしてください。
「マクロの設定」と書かれた画面で[OK]をクリックすると、「Outlookのオプション」ウィンドウに戻ります。
再度右下にある[OK]をクリックして、「Outlookのオプション」ウィンドウを閉じてください。
これでOutlookで自作のマクロを実行することができるようになります。
Outlookのマクロを使う事前準備その2 リボンに開発タブを表示する
Outlookで自作のマクロの実行を許可した後は、Outlookのリボンに開発タブを表示させます。
Outlookの「リボン」とは以下の赤枠で囲った箇所を指します。
リボン(英: ribbon)とは、マイクロソフトが提唱した、アプリケーションソフトウェアの操作コマンドメニューの表示領域におけるグラフィカルユーザーインターフェイス (GUI) 方式の一種である。Microsoft Office 2007で初めて搭載された。
Wikipedia https://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%9C%E3%83%B3_(GUI)
Outlookのリボンに開発タブを表示させることで、マクロの管理が簡単になります。
Outlookを起動し、左上にある[ファイル]をクリックしてください。
[ファイル]をクリックすると「アカウント情報」と大きく書かれた画面に移動します。
その中の[オプション]をクリックしてください。
[オプション]をクリックすると「Outlookのオプション」と書かれたウィンドウが立ち上がります。
そのウィンドウの左側にある[リボンのユーザー設定]をクリックしてください。
[リボンのユーザー設定]をクリックすると「リボンをカスタマイズします。」と書かれた画面に移動します。
右側の枠の中にある[開発]にチェックを入れて、右下の[OK]をクリックしてください。
受信したメールの添付ファイルを自動保存するためのマクロ
すべてのマクロを有効にし、Outlookのリボンに[開発]タブが表示されたら次は実際にマクロを作成していきましょう。
Option Explicit
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim folderPath As String
Dim entryIDs As Variant
Dim recTime As String
Dim attachFileName As String
Dim i As Long
Dim objMsg As Object
Dim objAttach As Attachment
folderPath = "C:\Users\Downloads\" '添付ファイルを保存するフォルダパスを指定、最後に\を付けること
entryIDs = Split(EntryIDCollection, ",") '複数のメールを同時受信した際は、複数のIDがカンマ区切りで渡されるため、カンマ区切りでIDを配列に格納
For i = 0 To UBound(entryIDs)
Set objMsg = Application.Session.GetItemFromID(entryIDs(i)) '受信したメールを取得
recTime = Format(objMsg.ReceivedTime, "yyyymmdd-hhmm_") '受信日時を取得してタイトル用に文字列に変換
For Each objAttach In objMsg.Attachments '受信メールに添付されたファイル毎に処理
attachFileName = folderPath & recTime & objAttach.FileName 'フォルダパスを付けて添付ファイル名を用意
objAttach.SaveAsFile attachFileName '添付ファイルを保存
Next
Next i
Set objMsg = Nothing
End Sub
上記がVBAのコードです。
14行目のfolderPath = "C:\Users\Downloads\"で保存先を指定しているので、そこを指定のフォルダーに書き換えてください。(必須)
フォルダーのフルパスを確認するには以下の手順で行います。
- 指定したいフォルダーを右クリック
- [プロパティ]をクリック
- [セキュリティ]タブをクリック
[セキュリティ]タブのオブジェクト名に書かれているのがフルパスです。
受信した日付毎にフォルダーを作成し、その中に受信したメールの添付ファイルを自動保存するためのマクロ
受信したメールの添付ファイルを自動保存するためのマクロの応用編で、指定したフォルダーの中に日付毎のサブフォルダーを自動で作成し、その中に添付ファイルを保存していくものです。
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim folderPath As String
Dim entryIDs As Variant
Dim recTime As String
Dim attachFileName As String
Dim i As Long
Dim objMsg As Object
Dim objAttach As Attachment
folderPath = "C:\Users\Downloads\" '添付ファイルを保存する親フォルダパスを指定、最後に\を付けること
entryIDs = Split(EntryIDCollection, ",") '複数のメールを同時受信した際は、複数のIDがカンマ区切りで渡されるため、カンマ区切りでIDを配列に格納
For i = 0 To UBound(entryIDs)
Set objMsg = Application.Session.GetItemFromID(entryIDs(i)) '受信したメールを取得
recTime = Format(objMsg.ReceivedTime, "yyyymmdd-hhmm_") '受信日時を取得してタイトル用に文字列に変換
subfolder = Format(objMsg.ReceivedTime, "yyyymmdd") '受信日時yyyymmddでサブフォルダ名を用意
frag = Dir(folderPath & subfolder, vbDirectory) 'Dir関数で親フォルダの中にサブフォルダの有無を確認
If frag = "" Then '親フォルダの中にサブフォルダがない場合(すでにサブフォルダがある場合は何もしない)
MkDir folderPath & subfolder 'サブフォルダを作成
End If
For Each objAttach In objMsg.Attachments '受信メールに添付されたファイル毎に処理
attachFileName = folderPath & subfolder & "\" & recTime & objAttach.Filename 'フォルダパスを付けて添付ファイル名を用意
'attachFileName = folderPath & subfolder & "\" & objMsg.SenderName & "_" & objMsg.Subject & "_" & recTime & objAttach.Filename '「メールのタイトル+送信者名+受信日時+添付ファイル名」の場合
objAttach.SaveAsFile attachFileName '添付ファイルを保存
Next
Next i
Set objMsg = Nothing
End Sub
上記がVBAのコードです。
12行目のfolderPath = "C:\Users\Downloads\"で保存先を指定しているので、そこを指定のフォルダーに書き換えてください。(必須)
件名に特定の文字列が含まれているメールの添付ファイルだけを自動保存するためのマクロ
「メールタイトルに特定の文字列を含むものだけの添付ファイルを保存したい」とご要望を頂いたので、件名に特定の文字列が含まれているメールの添付ファイルだけを自動保存するためのマクロを載せておきます。
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim folderPath As String
Dim entryIDs As Variant
Dim recTime As String
Dim attachFileName As String
Dim i As Long
Dim keyword As String
Dim objMsg As Object
Dim objAttach As attachment
folderPath = "C:\Users\Downloads\" ' 添付ファイルを保存するフォルダパスを指定、最後に\を付けること
keyword = "特定の文字列" ' チェックしたい特定の文字列を指定
' フォルダパスが存在するか確認
If Dir(folderPath, vbDirectory) = "" Then
MsgBox "指定したフォルダパスが存在しません: " & folderPath, vbExclamation
Exit Sub
End If
On Error GoTo ErrorHandler ' エラーハンドリングを有効にする
entryIDs = Split(EntryIDCollection, ",") ' 複数のメールを同時受信した際は、複数のIDがカンマ区切りで渡されるため、カンマ区切りでIDを配列に格納
For i = 0 To UBound(entryIDs)
Set objMsg = Application.Session.GetItemFromID(entryIDs(i)) ' 受信したメールを取得
' メールタイトルに特定の文字列が含まれているかチェック
If InStr(objMsg.Subject, keyword) > 0 Then
recTime = Format(objMsg.ReceivedTime, "yyyymmdd-hhmm_") ' 受信日時を取得してタイトル用に文字列に変換
For Each objAttach In objMsg.Attachments ' 受信メールに添付されたファイル毎に処理
attachFileName = folderPath & recTime & objAttach.FileName ' フォルダパスを付けて添付ファイル名を用意
objAttach.SaveAsFile attachFileName ' 添付ファイルを保存
Next objAttach
End If
Next i
Cleanup:
On Error Resume Next
Set objMsg = Nothing
Set objAttach = Nothing
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
Resume Cleanup
End Sub
上記がVBAのコードです。
13行目のfolderPath = "C:\Users\Downloads\"で保存先を指定しているので、そこを指定のフォルダーに書き換えてください。(必須)
14行目のkeyword = "特定の文字列"でメールの件名に含まれる特定の文字を指定しているので、そこを指定する文字列に書き換えてください。(必須)
受信したメールの添付ファイルを自動保存するためのマクロをOutlookに保存
マクロを作成できたら、以下の手順でマクロをOutlookに保存します。
[開発]タブを開いたら一番左にある[Visual Basic]をクリックしてください。
[Visual Basic]をクリックすると、上記のような画面が表示されます。
左上の枠の中にある[ThisOutlookSession]をクリックしてください。
[ThisOutlookSession]の中に受信したメールの添付ファイルを自動保存するためのマクロを貼り付けてください。
貼り付け終えたら左上にある[上書き保存]をクリックしてください。
上書き保存ができたら右上の✕をクリックしてマクロの画面を閉じてください。
受信したメールの添付ファイルを自動保存するためのマクロを動かしてみる
このマクロを動かすのは非常に簡単です。
Outlookで送受信し、添付ファイルがあるメールを受信したら自動で添付ファイルを指定したフォルダーに保存してくれます。
例えば、20221124-情シスの自由帳.pdf
という添付ファイルがあるメールをOutlookで受信した場合、指定したフォルダー内に20221125-1113_20221124-情シスの自由帳.pdf
というファイルが保存されます。
その他Outlookに関する記事
その他Outlookに関する記事はこちらです。ぜひご覧ください。
-
アウトルック(Microsoft Outlook)
添付されているwinmail.datの開き方6選
こんな方にオススメ winmail.datが添付されたメールが来て困っている方 winmail.datが何なのかわからない方 winmail.datの開き方を知りたい方 winmail.datを変換したい... -
アウトルック(Microsoft Outlook)
Outlookで行間が勝手に広くなる場合の対処法
こんな人にオススメの記事です Outlookで行間が勝手に広くなってしまった場合 Outlookで行間を狭くしたい人 Outlookを使用している際に、メールの行間が広がってしまい... -
アウトルック(Microsoft Outlook)
【Outlook】送信するメールのフォントや文字の色を変更する方法をわかりやすく解説
こんな人にオススメの記事です Outlookから送信するメールのフォントや文字の色を変更したい人 メールを見栄え良く作成したい人 Outlookには送信するメールのフォントや... -
アウトルック(Microsoft Outlook)
Outlookでメールの検索結果が正しく出てこない場合の対処法
こんな人にオススメの記事です Outlookでメールを検索しても一部の検索結果が出てこない Outlookでメールを検索しても検索結果に直近のメールが出てこない Outlookでメ... -
アウトルック(Microsoft Outlook)
【Outlook】メールテンプレートの作成方法と呼び出し方
こんな人にオススメの記事です 営業メールや問い合わせ対応メールを効率化したい人 フォーマットを固定してメールの送信ミスを防ぎたい人 日報や週報など定期的な報告を... -
アウトルック(Microsoft Outlook)
Outlookのキャッシュを安全に削除する方法
こんな人にオススメの記事です Outlookの動作が遅くなったと感じる場合 Outlookが頻繁にクラッシュする場合 Outlookを使い続けていると、動作が遅くなったり、メールの... -
アウトルック(Microsoft Outlook)
【Outlook】返信時に書式設定タブが表示されない原因と対処法
こんな人にオススメの記事です メール返信時に書式設定タブが見当たらない人 テキスト形式で届いたメールにHTML形式で返信したい人 HTML形式で届いたメールにテキスト形... -
アウトルック(Microsoft Outlook)
【Outlook】送受信間隔を1分に設定する方法
こんな人にオススメの記事です Outlook使っている方 メールの受信頻度をあげたい方 メールをできるだけ早く受信したい方 Outlookには一定の間隔でメールを自動的に送受... -
アウトルック(Microsoft Outlook)
【Outlook】メール本文内の画像を一括で保存する方法
こんな人にオススメの記事です メール本文内に埋め込まれた画像をまとめて保存したい人 GmailなどのHTML形式に対応しているメールソフトから送られてきたメールに画像が...
最後までご覧いただきありがとうございました。
このサイトは情シスマンが半径3m以内のITに関する情報を掲載してるサイトです。
Windows系を主として、ソフトや周辺機器の操作や設定について画像も用いながらわかりやすく解説しています。
解説している内容に誤りがあった場合や、補足が必要な場合、もっと知りたい場合はこちらのお問い合わせフォームからご連絡ください。
個人の方を限定にサポートさせていただきます。
実行環境
Windows11 Home 24H2
64 ビット オペレーティング システム
11th Gen Intel(R) Core(TM) i7-11375H @ 3.30GHz 3.30 GHz
16.0 GB RAM
Microsoft 365
コメント
コメント一覧 (2件)
Outlookでメールの添付ファイルを自動保存する流れはなんとなくわかりました。
ありがとうございます。
上記の流れの中にエクセルファイルをcsv形式に変換して保存する場合のVBAを個人的に教えて頂きたいです。
仕事で使いたい場面があって、あればすごく助かります。どうぞよろしくお願い致します。
こちらをプロセスに追加するのですが、全文を貼り付けてしまうと長くなりますので、メールでお送りさせていただきます。
' 一時的にファイルを保存
objAttach.SaveAsFile attachFileName
' Excel形式のファイルならばCSVに変換
If InStr(attachFileName, ".xls") > 0 Or InStr(attachFileName, ".xlsx") > 0 Then
' Excelアプリケーションを作成
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False ' 非表示でExcelを開く
' ワークブックを開く
Set xlWorkbook = xlApp.Workbooks.Open(attachFileName)
' CSVファイル名を設定(拡張子を一度だけ変換)
If InStr(attachFileName, ".xlsx") > 0 Then
csvFileName = Replace(attachFileName, ".xlsx", ".csv")
ElseIf InStr(attachFileName, ".xls") > 0 Then
csvFileName = Replace(attachFileName, ".xls", ".csv")
End If
' 重複ファイル名のチェックと番号追加(CSV版)
fileSuffix = 1
Do While Dir(csvFileName) <> ""
csvFileName = Replace(csvFileName, ".csv", "(" & fileSuffix & ").csv")
fileSuffix = fileSuffix + 1
Loop
' CSV形式で保存
xlWorkbook.SaveAs csvFileName, 6 ' 6はCSV形式を指定する定数
' Excelを閉じる
xlWorkbook.Close False
xlApp.Quit
' 一時的に保存したExcelファイルを削除
Kill attachFileName