【ExcelVBA-Tips】ーoutlookの送信メール一覧を抜き出すー

wakaru-program Excel VBA

皆さんは自分が仕事をしていて1日何通いつメールを送っているか、すぐに答えられますか?
メール処理には意外と時間が取られているものです。

そこで、今回の記事では、ExcelのVBAを使って、outlookの送信メール一覧をExcelのリストに出力する方法についてご紹介します!

やり方としては、まずExcelのVBA上で、outlookを連携させて送信済みフォルダを取得して、送信メールの一覧情報をリスト化していきます。

 ※マクロ入りのサンプルファイルも作成しているので、是非ダウンロードして使ってみてください!「送信一覧取得」ボタンを押すことで、送信メール一覧情報を取得できます(送信時間/宛先/件名)

excelVBA1
スポンサーリンク

実際のコードと解説

ここからは、実際のコードと内容を解説します。

まずは、こちらが実際のコードです。

手順の流れとしては、

  •     Outlookアプリケーションを起動
  •     受信フォルダ→一階層上のフォルダ→送信済フォルダの取得
  •     送信メール一覧を取得

という流れになっています。

VBAコード

Sub CheckSendMail()
 
    Dim objOutlook, objNamespace, objSendFolder As Object
    Dim objInbox, objParFolder, objMailbox As Object
    Dim wr_row As Long
    Dim i As Long
    Dim j As Long
    
    'Outlookアプリケーションを起動
    Set objOutlook = CreateObject("Outlook.Application")
    Set objNamespace = objOutlook.GetNamespace("MAPI")
    
    '受信フォルダ→一階層上のフォルダ→送信済フォルダの取得
    Set objInbox = objNamespace.GetDefaultFolder(6)
    objParFolder = objInbox.Parent
    Set objMailbox = objNamespace.Folders(objParFolder)
    Set objSendFolder = objMailbox.Folders("送信済みアイテム")
       
    '送信メール一覧を取得
    wr_row = 2
    For i = 1 To objSendFolder.Items.Count
        If objSendFolder.Items(i).Class = 43 Then
            Cells(wr_row, 1).Value = objSendFolder.Items(i).ReceivedTime    '送信時間
            Cells(wr_row, 2).Value = objSendFolder.Items(i).Subject         '件名
            Cells(wr_row, 3).Value = objSendFolder.Items(i).To              '宛先
            wr_row = wr_row + 1
        End If
    Next
 
End Sub

【詳細解説】

Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")

 ExcelからOutlookを操作するために、まずはOutlookアプリケーションのオブジェクトを生成します。これを作ることによって、VBA上でOutlookの操作ができます。
Namespaceオブジェクトは、Outlookのデータフォルダにアクセスできるオブジェクトで、初めに設定します。

Set objInbox = objNamespace.GetDefaultFolder(6)
objParFolder = objInbox.Parent
Set objMailbox = objNamespace.Folders(objParFolder)
Set objSendFolder = objMailbox.Folders("送信済みアイテム")

GetDefaultFolderを使って、受信フォルダのオブジェクトを設定し、Parentプロパティで、受信トレイの階層上位=受信トレイ以外のフォルダ オブジェクト取得します。
そして、objNamespace.Foldersによって、メールボックスの全てのフォルダを取得。最後に、.Folders(“送信済みアイテム”)を指定して、今回の目的である送信メールのフォルダを取得します。

 取得した送信済みフォルダから送信メール一覧の情報を取得し、Excelのセルに書き込んでいきます。objSendFolder.Items.Countで送信メールの数をカウントして、For文で1つずつ処理します。If objFolder.Items(i).Class = 43はメールアイテムの判別をしてメールのみを抽出。以降、objSendFolder.Items(i)のプロパティである「ReceivedTime」送信時間「Subject」件名「To」宛先情報をセルに書き込みます。

wr_row = 2
    For i = 1 To objSendFolder.Items.Count
        If objSendFolder.Items(i).Class = 43 Then
            Cells(wr_row, 1).Value = objSendFolder.Items(i).ReceivedTime    '送信時間
            Cells(wr_row, 2).Value = objSendFolder.Items(i).Subject         '件名
            Cells(wr_row, 3).Value = objSendFolder.Items(i).To              '宛先
            wr_row = wr_row + 1
        End If
    Next

 今回のサンプルファイルで「送信一覧取得」ボタンを押した実行結果は、以下のような結果になります。

excelVBA2

 このように、送信メールの一覧情報をExcelにリスト化することができました。

メールを送っている時間帯も把握できるので、自分の仕事を見直す材料になるかもしれませんね。皆様も是非、試してみてください!

サンプルファイル格納場所はこちら→こちら

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