【Outlook VBA】メール本文をExcelに書き出す方法

【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文を設定して、目的のメールだけを情報取得するようにアレンジしてみてください。

VBAが難しいと感じたら
プロにお任せして代わりに作ってもらってはいかがでしょう?
VBAの作成依頼はこちらから

《VBA中級者向けの本》
VBA上級者を目指したい人にはパーフェクトExcel VBA一択です。

created by Rinker
技術評論社
¥3,608 (2023/02/07 15:31:32時点 Amazon調べ-詳細)

他の「VBA」の記事はこちらからどうぞ

VBA

Posted by やろまい