メールは件名で保存されてしまい受信日時が分からない
outlookのメールをコピーしてパソコンのデスクトップやハードディスク、サーバーのフォルダに保存することがあります。
この場合、メールの件名がファイル名になり、ファイルの作成日時、更新日時は保存した日時になってしまいます。
そのため、過去のメールを保存した場合は、いつのメールか開かないと分からず、また時系列に確認したいときは特に不便です。
今回は、そんな不便を解消するマクロを紹介します。
デスクトップやハードディスクやサーバーのフォルダに保存したOutlookアイテムのファイル名(「件名.msg」)を先頭に受信日時を入れて変更するマクロです。


マクロの実行した様子の動画はこちら。
msgファイルのファイル名に受信日時を追記するマクロ
やりたい手順はこんな感じです
今回マクロでは次のようなことをします。
- ダイアログボックスでメールが保存されているフォルダを指定する(コードの6行目~9行目)
- 指定したフォルダのファイルを順次処理する。(14行目~18行目、45行目)
- ファイルの拡張子が「msg」のファイルの場合だけ処理する(24行目)
- ファイルから日時の情報を取得する(27行目~33行目)
- 日時の情報を「yyyy_mm_hh_」形式の文字列に変更する。(36行目、37行目)
- ファイル名を「件名.msg」から「2023_0103_1458_件名.msg」のように年(2023)月日(0103)、時刻(1458)を入れて変更する。(40行目~43行目)
- ファイルの拡張子が「msg」のファイルの場合だけ処理する(24行目)
今回のマクロでは、「ダイアログボックスを開いてフォルダを指定する」というのは、いろんなマクロで使いまわしが効くので部品として覚えておくと便利です。
指定したフォルダのファイルを順次実行するというのは、「よく使うFor~Next4選。」の記事で紹介したマクロのコードを使います。

マクロのコード
マクロのコードです。
Sub msgfile_rename()
'年月日日時の表示形式を設定
Dim TIMEFORMAT As String
TIMEFORMAT = "yyyy_mmdd_hhmm_"
'ダイアログを開いて選択されたファルダを変数に格納
Dim dir_path As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = True Then
dir_path = .SelectedItems(1)
End If
End With
'フォルダ内のファイルの順次処理 最初の4行は決まり文句
Dim objFSO As Object
Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile As Object
For Each objFile In objFSO.getfolder(dir_path).Files
'ファイルパスを格納
Dim objPath As String
objPath = dir_path & "\" & objFile.Name
'ファイルがmsgファイルなら実行
If LCase(objFSO.GetExtensionName(objFile)) = "msg" Then
'msgファイルから日時抽出
Dim objOutlook As Object
Dim objMsg As Object
Dim recieve_Time
Set objOutlook = CreateObject("Outlook.Application")
Set objMsg = objOutlook.CreateItemFromTemplate(objPath)
recieve_Time = objMsg.ReceivedTime
'日時のフォーマット調整
Dim str_Time As String
str_Time = Format(recieve_Time, TIMEFORMAT)
'ファイル名の変更、すでに日時が入っていたら変更しない
If Left(objFile.Name, Len(str_Time)) <> str_Time Then
objFile.Name = str_Time & objFile.Name
End If
End If
Next
Set objFSO = Nothing
MsgBox "File rename is complete."
End Sub
ファイルを順次処理する部分(15~18行目)はもう決まり事みたいなものとして使ったらよいです。あまり1行1行意味を考えても仕方ありません。
プロのプログラマではないので動けばよしとしましょう。
26行目から33行目がoutlookの機能を使って受信日時を抽出している部分です。
24行目のファイル名の拡張子を判定するという部分は、フォルダのファイルを順次処理していくときには役に立ちます。これを「xlsx」で判定すれば、いろんな種類のファイルが保存されているフォルダのなかのExcelファイルだけを処理するということもできます。
PC上の保存したOutlookメールのmsgファイルの一覧を作成するExcelマクロ
OutlookのメールをPC上に保存したときには、使い勝手が非常に悪いです。ファイルの作成日時はメールをPCに保存した日になってしまい受信日時が分かりません。
また、添付ファイルの数や名前などもmsgファイルを開かないと確認できません。
そこで、PC上やハードディスクに保存したOutlookのメールの件名・受信日時・本文・添付ファイルの一覧を作成するマクロを作成しnoteで公開しています。


今回は、PCに保存したOutlookのメールファイルのファイル名に受信日時を加えるマクロでした。
引継ぎのためにメールを外部に保存するときなどに活用できるマクロです。
このマクロで上手くいったかどうかや、画面下のコメント欄から改良提案などコメントもらえると嬉しいです。


ChatGPT はじめてのプロンプトエンジニアリング
Excel VBA塾 初心者OK!仕事をマクロで自動化する12のレッスン


コメント
マクロの存在だけは知っている位の初心者です。
メールのデータ保存で困っていたところ、このマクロを見つけました。
一瞬で日付が追加されて感動しました。
これで日付の後に差出人名(もしくはメールアドレス)が付けられると、
もっと見つけやすくなると思います。
これを機に私もマクロについて勉強しようと思います。
公開してくださってありがとうございました。