【Outlook VBA】メール本文をExcelに書き出す方法
今回はメール本文をExcelに書き出すVBAプログラムを紹介します。
書き出したイメージは上の画像のようになり、「差出人、メールタイトル、本文」の3つをExcelシート上に書き出しされます。
- 依頼メールをExcelで管理したい
- どのようなメールが来ているか分析したい
このようなニーズがある方は一度試してみてはいかがでしょうか。
事前準備(ライブラリの参照設定)
このプログラムはExcelのVBA(マクロ)から実行します。
Outlookのライブラリを使用するため、下記記事を参考に「Microsoft Outlook **.* Object Library」の参照設定をしてください。
メール本文をExcelに出力するプログラム
Sub Mail2Sheet()
''受信メールの内容をアクティブシートへ書き出す
On Error Resume Next
Dim getMailNum As Long
getMailNum = InputBox("直近何件のメールを書き出しますか?")
''数値以外が入力された場合は終了する
If Err.Number > 0 Then MsgBox "数字を入力してください": Exit Sub
On Error GoTo 0
''Outlook オブジェクトの取得
Dim olapp As Outlook.Application: Set olapp = New Outlook.Application
Dim olNamespace As Outlook.Namespace: Set olNamespace = olapp.GetNamespace("MAPI")
Dim olFolder As Outlook.Folder: Set olFolder = olNamespace.GetDefaultFolder(olFolderInbox)
Dim olItems As Outlook.items: Set olItems = olFolder.items
''メール内容を保存するコレクションを生成して見出しを保存
Dim mailDatas As Collection
Set mailDatas = New Collection
mailDatas.Add Array("差出人", "メールタイトル", "本文")
''メール内容をコレクションに保存
Dim item_i As Long, counter As Long
For item_i = olItems.Count To 1 Step -1
mailDatas.Add Array(olItems(item_i).SenderName, olItems(item_i).Subject, olItems(item_i).Body)
counter = counter + 1
If counter = getMailNum Then Exit For
Next
''コレクションの中身をアクティブシートへ書き出す
Dim row_i As Long
For row_i = 1 To mailDatas.Count
Cells(row_i, 1).Resize(, 3) = mailDatas.Item(row_i)
Next
'オブジェクトの解放
Set olItems = Nothing
Set olFolder = Nothing
Set olNamespace = Nothing
Set olapp = Nothing
End Sub
このプログラムをExcelから実行するとページトップの画像のように各メールの「差出人、メールタイトル、本文」がアクティブシート上に書き出されます。
最初に直近何件のメールを書き出すかメッセージが表示されるので、書き出したい件数を入力してください。
入力した件数分だけ直近のメールを書き出されます。
For item_i = olItems.Count To 1 Step -1
mailDatas.Add Array(olItems(item_i).SenderName, olItems(item_i).Subject, olItems(item_i).Body)
counter = counter + 1
If counter = getMailNum Then Exit For
Next
メールの情報取得はこの中のmailDatas.Add~の部分で行っています。
書き出したいメールに条件設定したい(例えば~さんからのメールに絞りたい)場合にはこの部分にIf文を設定して、目的のメールだけを情報取得するようにアレンジしてみてください。