エクセルVBAでOutlookの受信メールをワークシートに書き出す方法


vba-outlook-outputmail

みなさまこんにちは、ノグチです。

前回は、Outlookの受信メールフォルダと、そのサブフォルダーにアクセスしてフォルダ名を書き出す方法をご紹介しました。

エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
エクセルVBAでOutlookの受信メールフォルダにあるメールの内容を、エクセルのワークシートに書き出す方法を、数回の連載でご紹介しています。今回は、GetDefaultFolderメソッドとFoldersプロパティで、受信メールフォルダとサブフォルダの名称を書き出す方法のご紹介です。

今回はいよいよ、フォルダ内のメールの内容を、エクセルワークシートに書き出していく方法をご紹介します!

スポンサーリンク

FolderオブジェクトのItemsプロパティでフォルダ内のメールを取得する

Itemsプロパティの記述方法

前回の記事で、GetDefaultFolderメソッドと引数olFolderInboxで、Outlookの受信メールフォルダーとそのサブフォルダーにアクセスすることができました。

今回の記事の目的である、フォルダの中のメールの内容を書き出すためには、フォルダ内のメールのデータにアクセスする必要がありますね。

そこで使うのが、GetDefaultFolderメソッドで取得したFolderオブジェクトの、Itemsプロパティ。

Itemsプロパティは、Outlookのデータフォルダ内にある、受信メールフォルダ内のメールデータをItemsオブジェクトとして取得できるメソッドです。

記述方法はコチラ。
Folderオブジェクト.Items(メールのインデックス番号)

MailItemオブジェクトのプロパティでメールの情報を取得

FoldersオブジェクトのItemsプロパティで取得できたItemsオブジェクトは、MailItemオブジェクトの形で取得できるので、MailItemオブジェクトのプロパティで、欲しい情報を取得していきます。

MailItemオブジェクトのプロパティは、下記記事でまとめていますのでそちらをご覧くださいね。

エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
OutlookのMailItemオブジェクトのDisplayメソッドを使って、VBAで作成したOutlookのメール内容を、メール送信前にチェックする方法をご紹介しています。「VBAでメールを作成するのは便利だけど、内容をチェックしないでメール送信してしまうのは心配...」という方にお勧めです。

今回は、メールの送信日、件名、本文を取得してみましょう。

ここまでをコードにしてみると、こんな感じのコードになります。

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メソッドはこんな感じで記述します。

Foldersオブジェクト.Item(フォルダ名)

引数のフォルダ名は、文字型で指定してくださいね。

特定のフォルダからメールを取り出してワークシートに書き出すコード

では、ItemsオブジェクトとFoldersオブジェクトのItemメソッドを使って、受信メールフォルダからメールを取り出してみましょう。

まず、このような書き出し用のワークシートを準備しました。

vba,outlook,書き出し,ワークシート

書き出し対象のサブフォルダがコチラ。

3件のメールがありますね。

outlook,vba,受信メールフォルダ
そしてコードがこちら。
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を操作してみよう!

エクセルVBAでOutlookのメール作成、送信などの操作をする方法をご紹介しています。メーラーとして便利なOutlookですが、VBAと組み合わせて更に便利に使ってしまいましょう。

  1. 【エクセルVBA】エクセルVBAでOutlookを操作しよう!参照設定とOutlookアプリケーションオブジェクトの取得
  2. 【エクセルVBA】Outlookでメールを作成・送信する方法
  3. 【エクセルVBA】エクセルシートに一覧化された複数の連絡先に本文を変えつつOutlookでメールを一括送信する方法
  4. エクセルVBAでOutlookメールの下書きを作成・表示して送信前に内容チェックする
  5. エクセルVBAでOutlookの連絡先を登録する方法
  6. 【エクセルVBA】GetNamespaceメソッドでOutlookのデータフォルダにアクセスする方法
  7. エクセルVBAでOutlookの受信メールフォルダとサブフォルダ名を書き出す方法
  8. エクセルVBAでOutlookの受信メールをワークシートに書き出す方法


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