皆さんは自分が仕事をしていて1日何通いつメールを送っているか、すぐに答えられますか?
メール処理には意外と時間が取られているものです。
そこで、今回の記事では、ExcelのVBAを使って、outlookの送信メール一覧をExcelのリストに出力する方法についてご紹介します!
やり方としては、まずExcelのVBA上で、outlookを連携させて送信済みフォルダを取得して、送信メールの一覧情報をリスト化していきます。
※マクロ入りのサンプルファイルも作成しているので、是非ダウンロードして使ってみてください!「送信一覧取得」ボタンを押すことで、送信メール一覧情報を取得できます(送信時間/宛先/件名)

実際のコードと解説
ここからは、実際のコードと内容を解説します。
まずは、こちらが実際のコードです。
手順の流れとしては、
- 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
今回のサンプルファイルで「送信一覧取得」ボタンを押した実行結果は、以下のような結果になります。

このように、送信メールの一覧情報をExcelにリスト化することができました。
メールを送っている時間帯も把握できるので、自分の仕事を見直す材料になるかもしれませんね。皆様も是非、試してみてください!
サンプルファイル格納場所はこちら→こちら