みなさまこんにちは、ノグチです。
前回は、Outlookの受信メールフォルダと、そのサブフォルダーにアクセスしてフォルダ名を書き出す方法をご紹介しました。

今回はいよいよ、フォルダ内のメールの内容を、エクセルワークシートに書き出していく方法をご紹介します!
FolderオブジェクトのItemsプロパティでフォルダ内のメールを取得する
Itemsプロパティの記述方法
前回の記事で、GetDefaultFolderメソッドと引数olFolderInboxで、Outlookの受信メールフォルダーとそのサブフォルダーにアクセスすることができました。
今回の記事の目的である、フォルダの中のメールの内容を書き出すためには、フォルダ内のメールのデータにアクセスする必要がありますね。
そこで使うのが、GetDefaultFolderメソッドで取得したFolderオブジェクトの、Itemsプロパティ。
Itemsプロパティは、Outlookのデータフォルダ内にある、受信メールフォルダ内のメールデータをItemsオブジェクトとして取得できるメソッドです。
MailItemオブジェクトのプロパティでメールの情報を取得
FoldersオブジェクトのItemsプロパティで取得できたItemsオブジェクトは、MailItemオブジェクトの形で取得できるので、MailItemオブジェクトのプロパティで、欲しい情報を取得していきます。
MailItemオブジェクトのプロパティは、下記記事でまとめていますのでそちらをご覧くださいね。

今回は、メールの送信日、件名、本文を取得してみましょう。
ここまでをコードにしてみると、こんな感じのコードになります。
Sub GetMailtest() Dim objOutlook As Outlook.Application Dim myNamespace As Outlook.Namespace Dim myInbox As Folder Set objOutlook = New Outlook.Application Set myNamespace = objOutlook.GetNamespace("MAPI") Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox) With ThisWorkbook.Worksheets("Sheet1") .Cells(2, 1).Value = myInbox.Items(1).SentOn .Cells(2, 2).Value = myInbox.Items(1).Subject .Cells(2, 3).Value = myInbox.Items(1).Body End With End Sub
特定のフォルダからメールを取り出す
Itemメソッドで特定フォルダのFolderオブジェクトを取得する
上のコードは、受信メールフォルダ全体を対象にメールを取り出していますが、FoldersオブジェクトのItemメソッドを使って特定のフォルダにあるメールだけを対象にすることもできます。
さっきからFoldersだったりFolderだったり、ItemsだったりItemだったりややこしいですね。
Itemメソッドはこんな感じで記述します。
引数のフォルダ名は、文字型で指定してくださいね。
特定のフォルダからメールを取り出してワークシートに書き出すコード
では、ItemsオブジェクトとFoldersオブジェクトのItemメソッドを使って、受信メールフォルダからメールを取り出してみましょう。
まず、このような書き出し用のワークシートを準備しました。
書き出し対象のサブフォルダがコチラ。
3件のメールがありますね。
Sub GetMail() Dim objOutlook As Outlook.Application Dim myNamespace As Outlook.Namespace Dim myInbox, mySubfolder Set objOutlook = New Outlook.Application Set myNamespace = objOutlook.GetNamespace("MAPI") Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox) Set mySubfolder = myInbox.Folders.Item("SubFolder1") Dim i As Long For i = 1 To mySubfolder.Items.Count With ThisWorkbook.Worksheets("Sheet1") .Cells(i + 1, 1).Value = mySubfolder.Items(i).SentOn .Cells(i + 1, 2).Value = mySubfolder.Items(i).Subject .Cells(i + 1, 3).Value = mySubfolder.Items(i).Body End With Next i End Sub
受信メールフォルダのサブフォルダ「SubFolder1」を10行目のItemメソッドで取得して、
For ~ Nextのループ分の中でitemsオブジェクトの中身を、フォルダ内にあるメールの件数分だけ取り出して、ワークシートに書き込む…というコードです。
実行結果
このコードを実行してみると…
この通り、SubFolder1フォルダ内のメールがワークシートに書き出されていますね。
最後に
今回は、受信メールフォルダのサブフォルダ内にあるメールの内容を、ワークシートに書き出す方法をご紹介しました。
例えば、あるプロジェクトやイベントの出欠連絡などのメールの内容をワークシートに纏めないといけない!といった時にとっても便利ですよ。
それでは、最後までお読みいただきありがとうございました!
連載目次:エクセルVBAでOutlookを操作してみよう!
エクセルVBAでOutlookのメール作成、送信などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。
- 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
- 【エクセルVBA】Outlookでメールを作成・送信する方法
- 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
- エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
- エクセルVBAでOutlookの連絡先を登録する方法
- 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
- エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
- エクセルVBAでOutlookの受信メールをワークシートに書き出す方法