Outlookのメールをエクセルに出力したい!
メールの本文をエクセルでまとめ、集計を行いたい!
Outlookの受信メールをExcelで集計したいとき、手作業での転記は意外と面倒な作業です。特に、本文の集計が必要な場合、コピー&ペーストするのは非効率ですよね。
そんな時に活躍するのが、メール自動取得VBAです。
今回紹介するコードをコピペするだけで、Outlookの受信フォルダからメールを自動で取得し、Excelに一覧として出力できます。また期間指定機能があるため、受信ボックスに大量のメールが入っている方も、分割して高速で処理が可能です。
「VBAは初めてでよく分からない…」という方でも、そのまま使えるシンプルなコードになっていますので、ぜひ試してみてください!
また、件名などの情報はVBAを使わなくても取得が可能です。VBAを使わない出力方法も解説しているので、そちらも参考にしてみてください。
このブログでは、ほかにもコピペ・ダウンロードで使えるVBAを紹介しています。ぜひほかの記事も参考にしてみてください!
【結論】コピペで使えるメール出力VBA
以下のコードをコピペするだけで、Outlookの受信ボックスに入ったメールを、自動転記できます。
詳しい使用方法は、この後紹介します。
Sub ImportOutlookEmails()
Dim OutlookApp As Outlook.Application
Dim OutlookNamespace As Outlook.Namespace
Dim OutlookFolder As Outlook.MAPIFolder
Dim OutlookItems As Outlook.Items
Dim OutlookMail As Outlook.MailItem
Dim xlWorksheet As Worksheet
Dim iRow As Integer
Dim startDate As Date
Dim endDate As Date
Dim attachmentStatus As String
Dim inputStartDate As String, inputEndDate As String
Application.ScreenUpdating = False
' 期間指定のためのダイアログボックスを表示(YYYYMMDD形式)
inputStartDate = InputBox("取り込むメールの開始日を入力してください(YYYYMMDD形式)")
inputEndDate = InputBox("取り込むメールの終了日を入力してください(YYYYMMDD形式)")
' 入力を日付型に変換
startDate = DateSerial(Left(inputStartDate, 4), Mid(inputStartDate, 5, 2), Right(inputStartDate, 2))
endDate = DateSerial(Left(inputEndDate, 4), Mid(inputEndDate, 5, 2), Right(inputEndDate, 2))
' Outlookのインスタンスを作成
Set OutlookApp = New Outlook.Application
Set OutlookNamespace = OutlookApp.GetNamespace("MAPI")
' 受信トレイのメールを取得
Set OutlookFolder = OutlookNamespace.GetDefaultFolder(olFolderInbox)
' アクティブシートを取得
Set xlWorksheet = ThisWorkbook.ActiveSheet
' 既存データ(2行目以降)を削除
If xlWorksheet.UsedRange.Rows.Count > 1 Then
xlWorksheet.Rows("2:" & xlWorksheet.Rows.Count).Delete
End If
' Excelヘッダー行を設定
xlWorksheet.Cells(1, 1).Value = "送信者"
xlWorksheet.Cells(1, 2).Value = "件名"
xlWorksheet.Cells(1, 3).Value = "本文"
xlWorksheet.Cells(1, 4).Value = "日付"
xlWorksheet.Cells(1, 5).Value = "添付有無"
iRow = 2 ' データ行の開始行
' Outlookのメールを取得
Set OutlookItems = OutlookFolder.Items
OutlookItems.Sort "[ReceivedTime]", True ' 受信日時でソート(新しい順)
Dim Count As Integer
Count = 0
For Each Item In OutlookItems
' アイテムの型を確認して MailItem の場合のみ処理する
If TypeOf Item Is Outlook.MailItem Then
Set OutlookMail = Item ' 明示的に MailItem にキャスト
' メールの受信日時が指定された期間内である場合のみ取り込む
If OutlookMail.ReceivedTime >= startDate And OutlookMail.ReceivedTime <= endDate Then
' 添付ファイルの有無を判定
If OutlookMail.Attachments.Count > 0 Then
attachmentStatus = "あり"
Else
attachmentStatus = "なし"
End If
If OutlookMail.SenderEmailType = "EX" Then
' Exchangeアカウントの場合はSMTPアドレスを取得
On Error Resume Next ' エラー回避(Exchangeアカウントがない場合を考慮)
senderEmail = OutlookMail.Sender.GetExchangeUser().PrimarySmtpAddress
On Error GoTo 0 ' エラー制御を元に戻す
Else
' 通常のメールアドレスを取得
senderEmail = OutlookMail.SenderEmailAddress
End If
' メールの情報をExcelに書き込む
xlWorksheet.Cells(iRow, 1).Value = senderEmail
xlWorksheet.Cells(iRow, 2).Value = OutlookMail.Subject
xlWorksheet.Cells(iRow, 3).Value = OutlookMail.Body
xlWorksheet.Cells(iRow, 4).Value = Format(OutlookMail.ReceivedTime, "yyyy/mm/dd")
xlWorksheet.Cells(iRow, 5).Value = attachmentStatus
iRow = iRow + 1 ' 次の行に移動
Count = 1
ElseIf OutlookMail.ReceivedTime <= startDate Or OutlookMail.ReceivedTime >= endDate And Count = 1 Then
' 一度期間内に入った後、期間から外れればループから出る
Exit For
End If
End If
Next Item
' メッセージボックスで処理が完了したことを表示
MsgBox "OutlookのメールをExcelに取り込みました。", vbInformation
' オブジェクトを解放
Set xlWorksheet = Nothing
Set OutlookItems = Nothing
Set OutlookFolder = Nothing
Set OutlookNamespace = Nothing
Set OutlookApp = Nothing
Application.ScreenUpdating = True
Columns("A:E").Select
Selection.WrapText = False
Range("A1").Select
End Sub
【番外】そのまま使えるエクセルファイル
VBAが分からないという方向けに、VBAが入ったエクセルファイルを用意しました。ここに内容を書き込むだけで、簡単にメールが自動作成できます。
また、PCによっては「参照設定の追加」が必要となることがあります。エラーが出る場合は、この記事で紹介している「参照設定の追加」を試してください。

※ウイルスではもちろんありませんが、マクロ付きのため、自己責任でお願いします。
メール出力VBAの動作と使い方
実行すると、開始日と終了日の入力ボックスが表示されます。ここに『/』を入れずに、日付を入力してください。

すると受信ボックスに入っている、開始日~終了日までのすべてのメールが出力されます。件数が多いと実行に時間がかかるので、多い場合は区切って実行をしてください。
メール出力VBAの使い方
ここからはVBAのコピペ方法を含めて、使い方を紹介します。
エクセルの準備(項目設定)
まず、エクセルのシートに以下のタイトルを入力してください
・A列:送信者
・B列:件名
・C列:本文
・D列:日付
・E列:添付有無

直接この名前をVBAで認識はしていません。ただ、リスト入力の間違い防止になるため、この内容で入力してください。
VBAの埋込/ボタンの挿入
エクセルの「開発」タブから「Visual Basic」エディタを開きます。そしてVBAコードを「標準モジュール」に貼り付けます。
「開発」を出す設定やコードの書き方は、別の記事で詳しく解説しています。こちらの記事もぜひ参考にしてみてください。
【重要】参照設定の追加
このVBAを使用するためには、参照設定の追加が必要になります。エクセル上部の[開発]→[Visual Basic]と進み、VBAの編集画面を表示させます。(開発タブがない方はコチラ)

VBAの編集画面から[ツール]→[参照設定]と進みます。

参照設定の下の方に、[Microsoft Outlook 16.0 Object Library]があります。チェックを入れOKボタンを押します。

VBA実行
あとはVBAを実行すれば出力されます。基本的に、Outlookを立ち上げてからVBAを実行するようにしてください。
また受信フォルダに入っているすべてのメールが対象なので、必ず期間を指定するようにしてください。

また、実行ボタンを設置すると、マクロ画面を開く必要がなくなりとても便利です。ボタンのつけ方は、こちらの記事を参考にしてください。
※VBAを使わずにメール情報をエクセルに出力する方法
出力したい情報が送信者・件名・日付の場合、メールを選択してエクセルにドラッグすることで、出力が可能です。


メールを選択してエクセルに張り付けるだけなので、簡単に出力をすることができます。
件名だけの件数確認や、1日のメール送信数の確認などの場合は、この方法が便利です。
エラーの対処
このVBAを実行すると、以下のようなエラーが出ることがあります。

このエラーは、参照設定で解消できることがほとんどです。参照設定の方法は、この記事の[【重要】照設定の追加]の項を参考にしてください。
さいごに
今回は、Outlookのメール自動作成VBAを紹介しました。とても効率がUPするVBAなので、ぜひ活用してみてください。
またこのコードはChatGPTで作ったVBAを元にしています。ChatGPTを使ったVBA作成法も別の記事で紹介しています、そちらもぜひ参考にしてみてください!
コメント