msgファイルのファイル名に受信日時を一括して追加するマクロ

テーマはメールファイルのリネーム Excelの話

メールは件名で保存されてしまい受信日時が分からない

outlookのメールをコピーしてパソコンのデスクトップやハードディスク、サーバーのフォルダに保存することがあります。

この場合、メールの件名がファイル名になり、ファイルの作成日時、更新日時は保存した日時になってしまいます。

そのため、過去のメールを保存した場合は、いつのメールか開かないと分からず、また時系列に確認したいときは特に不便です。

今回は、そんな不便を解消するマクロを紹介します。

デスクトップやハードディスクやサーバーのフォルダに保存したOutlookアイテムのファイル名(「件名.msg」)を先頭に受信日時を入れて変更するマクロです。

マクロ実行前のファイル名
マクロの実行前
マクロ実行後のrenameされたファイル名
マクロ実行後 ファイル名の先頭に受信日時が入ります

マクロの実行した様子の動画はこちら。

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行目)

今回のマクロでは、「ダイアログボックスを開いてフォルダを指定する」というのは、いろんなマクロで使いまわしが効くので部品として覚えておくと便利です。

指定したフォルダのファイルを順次実行するというのは、「よく使うFor~Next4選。」の記事で紹介したマクロのコードを使います。

PC上の保存したOutlookメールのmsgファイルの一覧を作成するExcelマクロ|ふーた
PC上に保存したメールは検索性が低い OutlookのメールをPC上に保存したときには、使い勝手が非常に悪いです。 ファイルの作成日時はメールをPCに保存した日になってしまい受信日時が分かりません。 また、添付ファイルの数や名前などもmsgファイルを開かないと確認できません。 そこで、PC上やハードディスクに保...

マクロのコード

マクロのコードです。

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メールのmsgファイルの一覧を作成するExcelマクロ|ふーた
PC上に保存したメールは検索性が低い OutlookのメールをPC上に保存したときには、使い勝手が非常に悪いです。 ファイルの作成日時はメールをPCに保存した日になってしまい受信日時が分かりません。 また、添付ファイルの数や名前などもmsgファイルを開かないと確認できません。 そこで、PC上やハードディスクに保...

今回は、PCに保存したOutlookのメールファイルのファイル名に受信日時を加えるマクロでした。

引継ぎのためにメールを外部に保存するときなどに活用できるマクロです。

このマクロで上手くいったかどうかや、画面下のコメント欄から改良提案などコメントもらえると嬉しいです。

マクロが初めてでも使えるExcelでChatGPT-3.5に質問するVBAマクロ(64bit環境対応)|ふーた
ExcelでChatGPT3.5へ質問するマクロを作成しました 話題のChatGPTを使うVBAのコードについて書いています。 この記事は64bitのWindows11、32bitのExcel2019での動作の確認によっています。 (追記 2023/11/02)64bitExcelではエラーとなっていましたが、対応...

コメント

  1. ミント より:

    マクロの存在だけは知っている位の初心者です。
    メールのデータ保存で困っていたところ、このマクロを見つけました。
    一瞬で日付が追加されて感動しました。

    これで日付の後に差出人名(もしくはメールアドレス)が付けられると、
    もっと見つけやすくなると思います。

    これを機に私もマクロについて勉強しようと思います。
    公開してくださってありがとうございました。

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