このサイトの記事内では「アフィリエイト広告」などの広告を掲載している場合があります。
消費者庁が問題としている「誇大な宣伝や表現」とならないよう配慮しコンテンツを制作しておりますのでご安心ください。
問題のある表現が見つかりましたらお問い合わせよりご一報いただけますと幸いです。

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

2024年10月9日

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

今回はメール本文をExcelに書き出すVBAプログラムを紹介します。

書き出したイメージは上の画像のようになり、「差出人、メールタイトル、本文」の3つをExcelシート上に書き出しされます。

  • 依頼メールをExcelで管理したい
  • どのようなメールが来ているか分析したい

このようなニーズがある方は一度試してみてはいかがでしょうか。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

事前準備(ライブラリの参照設定)

このプログラムは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上級者を目指したい人にはパーフェクトExcel VBA一択です。
この本を読み切れば間違いなくVBA上級者になれます。

VBAが難しいと感じたら
ココナラにてVBAの作成依頼を受け付けています。
ご依頼・ご相談はこちらから

VBA

Posted by やろまい