受信トレイのサブフォルダ内のメールをエクセルに一覧にしたい
この記事では、以下の画像の「サブ」という名前のフォルダ内のメールをエクセルに一覧するマクロを紹介します。
なお、受信トレイのメールを一覧にする方法は、こちらの記事で詳しく紹介しています。
目次
outlookの受信トレイのサブフォルダ内のメールをエクセルに一覧にする
具体的なやり方やコードを紹介する前に、この記事で紹介するマクロで、どんなことができるか? を紹介します。
以下のような状態のエクセルを準備して、
この記事で紹介するマクロを使うと、以下のような結果がエクセルに一覧で出力されます。
メール添付ファイルは、以下のように自分で設定したフォルダに自動で保存されるようにします。
マクロを作成する前の準備|参照設定を変更する
エクセルVBAでoutlookのメールを操作するためのプログラミングに入る前に、準備しておくことがあります。
また、メールの添付ファイルを保存するフォルダも自動作成される設定も準備しておきます。それらの準備の方法は以下のとおりです。
準備|外部ライブラリへの参照設定を追加
参照設定とは、機能拡張させることです。この記事で利用するコードを使えるようにするには、以下の2つにチェックを入れます。
1.Microsoft Outlook 15.0 Object Library
2.Microsoft Scripting Runtime
1.Microsoft Outlook 15.0 Object Libraryにチェックを入れることで、Outlook操作の設定ができるようになります。
もしかすると、Microsoft Outlook 15.0 Objectはないときがあります。もし15.0ではなく、数字が小さい場合は、それにチェックを入れましょう。
2.Microsoft Scripting Runtimeにチェックを入れることで、添付ファイルを保存するフォルダを作成することができるようになります。
以下、具体的な設定方法を紹介します。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
3.Microsoft Scripting Runtimeのライブラリにチェックを入れて、OKをクリック
詳細はこちらの画像の通りです。
1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Outlook 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック
3.Microsoft Scripting Runtimeのライブラリにチェックを入れて、OKをクリック
プログラムはこちら
このままコピペして使ってください。
この記事で紹介するコードは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Option Explicit Sub Outlook_mail_list_subfolder() '''---コード1|このコード内で使用する変数を宣言 Dim InboxFolder, subfolder, i, n, k, attno As Long Dim sender, mes, path1 As String Dim outlookObj As Outlook.Application Dim myNameSpace, objmailItem As Object Dim fso As FileSystemObject '''---コード2|定義した変数に必要な項目をセット Set outlookObj = CreateObject(Outlook.Application) Set myNameSpace = outlookObj.GetNamespace(MAPI) Set InboxFolder = myNameSpace.GetDefaultFolder(6) Set subfolder = InboxFolder.Folders(サブ) n = 2 '''---コード3|メールの添付ファイルを保管するフォルダを作成 mes = InputBox(メールの添付資料を保管用フォルダを新しく作成します。フォルダ名を入力してください) path1 = ThisWorkbook.Path ; \ ; mes Set fso = CreateObject(Scripting.FileSystemObject) fso.CreateFolder (path1) '''---コード4|解析する受信メールの範囲を決める] MsgBox subfolder.Items.Count For i = 1 To subfolder.Items.Count Set objmailItem = subfolder.Items(i) '''---コード5|受信メールの件数、受信日時、件名(タイトル)、送信者名、送信元のメールアドレス、内容(本文)を取得 Range(A ; n).Value = i Range(B ; n).Value = objmailItem.ReceivedTime Range(C ; n).Value = objmailItem.subject Range(D ; n).Value = objmailItem.SenderName Range(E ; n).Value = objmailItem.SenderEmailAddress Range(F ; n).Value = Left(objmailItem.Body, 100) '''---コード6|メールの添付ファイルを保管する attno = objmailItem.Attachments.Count If attno > 0 Then For k = 1 To attno objmailItem.Attachments(k).SaveAsFile (path1 ; \ ; objmailItem.Attachments(k).DisplayName) Next Range(G ; n).Value = k Else Range(G ; n).Value = なし End If n = n + 1 Next '''---コード7|セットした変数を解除 Set outlookObj = Nothing Set myNameSpace = Nothing Set InboxFolder = Nothing End Sub |
サンプルプログラムの解説
基本的には、こちらの記事で紹介しています。
上の記事で紹介している内容と異なる部分だけを解説します。異なるのは、2か所だけです。
2行目:subfolder を追加
12行目:InboxFolder.Folders(“サブ”) を追加
1 2 3 4 5 6 7 8 9 10 11 12 13 |
'''---コード1|このコード内で使用する変数を宣言 Dim InboxFolder, subfolder, i, n, k, attno As Long ''' Dim sender, mes, path1 As String Dim outlookObj As Outlook.Application Dim myNameSpace, objmailItem As Object Dim fso As FileSystemObject '''---コード2|定義した変数に必要な項目をセット Set outlookObj = CreateObject(Outlook.Application) Set myNameSpace = outlookObj.GetNamespace(MAPI) Set InboxFolder = myNameSpace.GetDefaultFolder(6) Set subfolder = InboxFolder.Folders(サブ) n = 2 |
12行目:InboxFolder.Folders(“サブ”) を追加
もし、あなたのサブフォルダの名称が「サブ」ではなく、他の名称だったら、
「サブ」を変えてください。
たとえば、以下の画像であれば、
1 2 |
InboxFolder.Folders(サブ) InboxFolder.Folders(問い合わせ) |
1行目:①「サブ」のフォルダに含まれるメールを一覧に
2行目:②「問い合わせ」のフォルダに含まれるメールを一覧にする
となります。
フォルダのフォルダを解析する場合
フォルダのフォルダを解析する場合も考えます。
たとえば、サブ2のフォルダを解析したい場合は、以下のプログラムに変更して使ってください。
変更前
1 2 3 4 5 6 |
'''---コード2|定義した変数に必要な項目をセット Set outlookObj = CreateObject(Outlook.Application) Set myNameSpace = outlookObj.GetNamespace(MAPI) Set InboxFolder = myNameSpace.GetDefaultFolder(6) Set subfolder = InboxFolder.Folders(サブ) n = 2 |
変更後
1 2 3 4 5 6 |
'''---コード2|定義した変数に必要な項目をセット Set outlookObj = CreateObject(Outlook.Application) Set myNameSpace = outlookObj.GetNamespace(MAPI) Set InboxFolder = myNameSpace.GetDefaultFolder(6) Set subfolder = InboxFolder.Folders(サブ).Folders(サブ2) '←ここだけ変更 n = 2 |
変更は、4行目だけです。
テンプレートファイルをダウンロードしたい方はコチラから
紹介したIEを操作するコードを一から作るのは大変なので、記事の中で紹介したマクロのコードが入ったファイルは無料でダウンロードできるようにします。以下のフォームにメールアドレスを入力いただくと、返信メールからエクセルファイルをダウンロードできます。
受信メール解析コードを編集・アレンジしたいなら、手書きできると便利
エクセルVBAを使ったoutlookの受信メールの解析方法について、事例をあわせて紹介しました。今回の内容をぜひVBAの勉強に活かしてみてください。
紹介したコードを編集して利用すれば、outlookでの受信メールの解析はかなりのことができます。ぜひ、あなたがやりたいことに応用してくださいね。
しかし、この記事を読んだけど、「私にはまだチンプンカンプン…」、「自分で編集できそうにもない…」、「マクロの基礎も理解していない…」という場合なら、アウトルックとの連携を学ぶ前に、エクセルマクロの基礎から学ぶことをオススメします。
エクセルからoutlookを操作するマクロは、かなりハイレベルの内容です。土台ができていない内に学ぶと、挫折の原因になってしまいます。ですので、まずは基本を学びましょう。
もしきちんと学ぶなら、こちらの無料動画がオススメです。講師に質問できますので、分からないところがあっても安心ですし、今すぐ始めることができます。
この記事がVBAでアウトルックを操作して、自動メールを送ることができるようになれば、幸いです。もし、もう少しエクセルマクロついて知りたいなら、こちらの記事がおすすめです。