Outlookで受信したメールの中から、必要な件名・送信者・日時だけを効率的に抽出したいと思ったことはありませんか。
手作業で一つずつコピー&ペーストしていては、大量のメールを処理する際に膨大な時間がかかります。
この記事では、OutlookのVBA(Visual Basic for Applications)を活用して、これらの情報を自動的にCSVファイルへ書き出す手順を詳しく解説します。
この方法をマスターすれば、メール管理の効率が劇的に向上します。
【要点】Outlookメールの基本情報をCSVへ自動抽出するVBA活用法
- Outlook VBAマクロの作成: Outlookのメール情報をCSVファイルに書き出すためのVBAコードを記述・実行します。
- メール情報の取得: 指定したフォルダ内のメールから、件名、送信者、受信日時を取得します。
- CSVファイルへの出力: 取得したメール情報を、カンマ区切り(CSV形式)でファイルに保存します。
ADVERTISEMENT
目次
Outlook VBAでメール情報をCSVに出力する仕組み
OutlookのVBAは、Outlookアプリケーション自体を操作するためのプログラミング言語です。これにより、メールの検索、閲覧、作成、そして情報の抽出といった様々な自動化が可能になります。
今回の目的は、特定のフォルダに格納されているメールから、件名、送信者(From)、受信日時といった基本的な情報を取得し、それをCSV(Comma Separated Values)形式のテキストファイルとして保存することです。CSV形式は、Excelなどの表計算ソフトで簡単に開けるため、データの整理や分析に非常に便利です。
VBAコードは、Outlookのオブジェクトモデルという仕組みを通じて、メールアイテムにアクセスします。具体的には、`Application`オブジェクトから`Session`、`Folders`、そして個々の`MailItem`オブジェクトへと階層的にたどることで、メールの各プロパティ(件名、送信者、受信日時など)を取得します。取得した情報は、ファイル操作用のオブジェクトを使って、指定したパスのCSVファイルに追記していく形で書き出されます。
Outlook VBAマクロでメール情報をCSVに書き出す手順
- VBAエディタを開く
Outlookを開き、キーボードで「Alt」キーと「F11」キーを同時に押します。これにより、Visual Basic for Applicationsエディタ(VBAエディタ)が開きます。 - 標準モジュールを挿入する
VBAエディタのメニューバーから「挿入」をクリックし、次に「標準モジュール」を選択します。これにより、コードを記述するための新しいモジュールが作成されます。 - VBAコードを記述する
挿入されたモジュールウィンドウに、以下のVBAコードをコピー&ペーストします。コード内の「’」で始まる行はコメントであり、プログラムの動作には影響しません。必要に応じて、`fso`や`ts`といった変数名や、`strFolderPath`、`strFilePath`などのパスに関する部分を、ご自身の環境に合わせて変更してください。
Sub ExportMailInfoToCSV()
Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.Namespace
Dim objFolder As Outlook.Folder
Dim objMailItem As Outlook.MailItem
Dim objFSO As Object ' FileSystemObject
Dim objTS As Object ' TextStream
Dim strFolderPath As String
Dim strFilePath As String
Dim strLine As String
Dim i As Long
' --- 設定項目 ---
' 情報を抽出したいOutlookフォルダのパスを指定します。
' 例: "インボクス" (受信トレイ)
' "インボクス\SubFolder" (インボクス内のSubFolder)
strFolderPath = "インボクス"
' CSVファイルの出力先パスとファイル名を指定します。
' 例: "C:\Users\YourUsername\Documents\MailExport.csv"
strFilePath = "C:\Users\YourUsername\Documents\MailExport.csv"
' --- 設定項目ここまで ---
On Error GoTo ErrorHandler
' Outlookオブジェクトを取得
Set objOutlook = Application
Set objNamespace = objOutlook.GetNamespace("MAPI")
' 指定されたフォルダを取得
On Error Resume Next ' フォルダが存在しない場合のエラーを回避
Set objFolder = objNamespace.Folders(strFolderPath)
If objFolder Is Nothing Then
' サブフォルダの場合の処理
Dim folderParts() As String
folderParts = Split(strFolderPath, "\")
Set objFolder = objNamespace.Folders(folderParts(0))
For i = 1 To UBound(folderParts)
Set objFolder = objFolder.Folders(folderParts(i))
Next i
End If
On Error GoTo ErrorHandler ' エラーハンドリングを元に戻す
If objFolder Is Nothing Then
MsgBox "指定されたフォルダが見つかりません: " & strFolderPath, vbCritical
Exit Sub
End If
' FileSystemObjectを作成
Set objFSO = CreateObject("Scripting.FileSystemObject")
' CSVファイルを開く(なければ新規作成、あれば追記)
' UTF-8エンコーディングで開くためにBOMを付与
Set objTS = objFSO.OpenTextFile(strFilePath, 8, True, -1) ' 8 = ForWriting, 2 = TristateTrue (Unicode/UTF-8)
' CSVヘッダー行を書き込む(初回のみ)
If objTS.Size = 0 Then
objTS.WriteLine "件名,送信者,受信日時"
End If
' フォルダ内のメールアイテムをループ処理
For i = 1 To objFolder.Items.Count
If TypeName(objFolder.Items(i)) = "MailItem" Then
Set objMailItem = objFolder.Items(i)
' 各プロパティを取得
Dim strSubject As String
Dim strSenderName As String
Dim strReceivedTime As String
strSubject = objMailItem.Subject
strSenderName = objMailItem.SenderName
strReceivedTime = Format(objMailItem.ReceivedTime, "yyyy/mm/dd hh:nn:ss") ' 日時フォーマット指定
' CSV形式の行を作成(ダブルクォーテーションで囲む)
' 件名や送信者名にカンマが含まれる場合を考慮
strLine = """" & strSubject & "","""" & strSenderName & "","""" & strReceivedTime & """
' CSVファイルに書き込む
objTS.WriteLine strLine
End If
Next i
' リソースを解放
objTS.Close
Set objTS = Nothing
Set objFSO = Nothing
Set objMailItem = Nothing
Set objFolder = Nothing
Set objNamespace = Nothing
Set objOutlook = Nothing
MsgBox "メール情報のCSVエクスポートが完了しました。", vbInformation
Exit Sub
ErrorHandler:
MsgBox "エラーが発生しました: " & Err.Description, vbCritical
If Not objTS Is Nothing Then
If objTS.AtEndOfStream = False Then objTS.Close
End If
Set objTS = Nothing
Set objFSO = Nothing
Set objMailItem = Nothing
Set objFolder = Nothing
Set objNamespace = Nothing
Set objOutlook = Nothing
End Sub
- コードのカスタマイズ
上記のコード内の以下の部分を、ご自身の環境に合わせて修正してください。- `strFolderPath = “インボクス”`: 抽出したいメールが格納されているOutlookフォルダ名を指定します。受信トレイの場合は「インボクス」、送信済みアイテムの場合は「送信済みアイテム」など、正確なフォルダ名を入力してください。サブフォルダを指定する場合は、パス区切り文字としてバックスラッシュ(\)を使用します(例: “インボクス\特定フォルダ”)。
- `strFilePath = “C:\Users\YourUsername\Documents\MailExport.csv”`: CSVファイルを作成・保存する場所とファイル名を指定します。指定したパスにフォルダが存在しない場合はエラーになりますので、事前にフォルダを作成しておいてください。ファイル名は任意で変更可能です。
- マクロの実行
VBAエディタのメニューバーから「実行」をクリックし、「Sub/ユーザーフォームの実行」を選択します。または、コードウィンドウ内でカーソルをマクロコード内に置き、「F5」キーを押します。マクロが正常に実行されると、指定したフォルダからメール情報が抽出され、指定したCSVファイルに書き込まれます。完了メッセージが表示されたら、指定した場所にCSVファイルが作成されているか確認してください。
CSVファイルへの出力における注意点とトラブルシューティング
CSVファイルが文字化けしてしまう場合
CSVファイルを開いたときに文字化けが発生する場合、エンコーディングの問題が考えられます。上記のコードではUTF-8エンコーディングで出力するように設定していますが、Excelのバージョンや設定によっては正しく解釈されないことがあります。
対処法:
- Excelで開く際にエンコーディングを指定する
ExcelでCSVファイルを開く場合、「ファイル」タブ → 「開く」 → 「参照」からCSVファイルを選択します。ファイル選択ダイアログの右下にある「ファイルの種類」で「テキストファイル」を選択し、CSVファイルを選びます。すると「テキストファイルのインポート」ウィザードが表示されるので、「ファイルの種類」で「Unicode (UTF-8)」を選択してインポートを完了させます。 - VBAコードのエンコーディングを変更する
VBAコード内の`OpenTextFile`メソッドの引数を変更し、Shift_JISなどで出力するように変更することも可能です。ただし、UTF-8の方が互換性が高い場合が多いです。`Set objTS = objFSO.OpenTextFile(strFilePath, 8, True, -1)` の `-1` を `0` (ANSI/Shift_JIS) に変更するとShift_JISで出力されます。
指定したフォルダのメールが抽出されない場合
指定したフォルダパスが間違っているか、フォルダが存在しない可能性があります。また、Outlookのデータファイル(.pstまたは.ost)が破損している場合も、正常にメールアイテムを取得できないことがあります。
対処法:
- フォルダパスの確認
Outlookで、VBAコードに記述したフォルダ名が正確であるか再確認してください。特にサブフォルダを指定する場合は、バックスラッシュ(\)で正しく区切られているか確認が必要です。 - Outlookのデータファイル修復
Outlookのデータファイルが破損している場合は、受信トレイ修復ツール(SCANPST.EXE)を使用して修復を試みてください。このツールはOutlookのインストールフォルダ内にあります。 - 別のフォルダで試す
一時的な問題か確認するため、受信トレイなど、確実にメールが存在する別のフォルダでマクロを実行してみてください。
件名や送信者名にカンマが含まれる場合の表示崩れ
CSVファイルでは、各項目がカンマ(,)で区切られます。もしメールの件名や送信者名にカンマが含まれていると、CSVファイルを開いた際に意図しない列にデータが入ってしまうことがあります。
対処法:
- ダブルクォーテーションによる囲み
上記のVBAコードでは、`strLine = “””” & strSubject & “”,”””” & strSenderName & “”,”””” & strReceivedTime & “””
` の部分で、各項目をダブルクォーテーション(“)で囲んでいます。これにより、項目内にカンマが含まれていても、CSVファイルとして正しく解釈されるようになります。この部分は、CSVの標準的な仕様に則った処理です。 - Excelでの区切り文字変更
もしExcelで開いた際に問題が発生した場合は、Excelの「データ」タブにある「区切り位置」機能を使って、カンマ区切りではなく、ダブルクォーテーションで囲まれたテキストとして再解析することも可能です。
マクロのセキュリティ設定について
OutlookやOfficeアプリケーションでは、セキュリティのためにマクロの実行が制限されている場合があります。マクロが実行されない場合は、セキュリティ設定を確認する必要があります。
対処法:
- Outlookのセキュリティセンター設定
「ファイル」タブ → 「オプション」 → 「セキュリティセンター」 → 「セキュリティセンターの設定」を開きます。「マクロの設定」で、「すべてのマクロを無効にする(通知あり)」または「すべてのマクロを無効にする(推奨)」以外を選択し、マクロの実行を許可する設定に変更してください。ただし、セキュリティリスクを伴うため、信頼できるソースからのマクロのみを実行するように注意が必要です。
ADVERTISEMENT
新しいOutlook(プレビュー版)でのVBA利用について
現在、Microsoftは新しいOutlook(プレビュー版)を提供しており、従来のOutlookとは一部インターフェースや機能が異なります。新しいOutlookでは、従来のVBAマクロがそのまま動作しない可能性があります。
新しいOutlookで同様の自動化を行いたい場合は、OfficeスクリプトやPower Automateなどの、よりモダンな自動化ソリューションの利用が推奨されます。これらのツールは、Webベースで動作し、より広範なアプリケーションとの連携が可能です。
ただし、新しいOutlookの提供状況や機能は変更される可能性があるため、最新の情報はMicrosoftの公式ドキュメントをご確認ください。
まとめ
この記事では、Outlook VBAを使用して、メールから件名、送信者、受信日時といった情報を抽出し、CSVファイルに自動で書き出す手順を解説しました。
このVBAマクロを活用することで、手作業によるメール情報の整理にかかる時間を大幅に削減できます。
今後は、抽出する情報を「本文の冒頭部分」や「添付ファイルの有無」などに拡張したり、特定の条件(例: 特定の送信者からのメールのみ)で抽出するようコードを改変したりすることも可能です。ぜひ、ご自身の業務に合わせてカスタマイズしてみてください。
ADVERTISEMENT
超解決 リモートワーク研究班
Microsoft 365の導入・保守を専門とするエンジニアグループ。通信障害やサインイン不具合など、ビジネスインフラのトラブル対応に精通しています。
Office・仕事術の人気記事ランキング
- 【Outlook】宛先が「オートコンプリート」に出ない・間違っている時の修正手順|履歴の削除と再構築
- 【Word】差し込み印刷で数字の桁を整える!金額にカンマ(桁区切り)を入れる設定
- 【Teams】メッセージを「保存済み」にして後で読む!重要なチャットをブックマークして整理する技
- 【Excel】矢印キーで「セルが動かず画面がスクロールする」!ScrollLockの解除方法(ノートPC対応)
- 【Outlook】メールの受信が数分遅れる!リアルタイムで届かない時の同期設定と送受信グループ設定
- 【Outlook】「メール送信を5分遅らせる」設定!誤送信を防ぐ最強のディレイ機能
- 【神技】保存せずに閉じたExcel・Wordファイルを復元する!消えたデータを復活させる4つの救出法
- 【Outlook】予定表の「祝日」が表示されない!最新カレンダーの追加と二重表示の修正手順
- 【Excel】文字がセルの枠からはみ出す・隠れる!「折り返して表示」と「縮小して全体を表示」の使い分け
- 【Teams】会議の「参加者リスト」を出席後にダウンロードする!誰が参加したか確認する手順
