Outlookの検索は、5桁未満の場合は検索されません。
Microsoftのサイトでもそのように記載されています。
Outlook で検索する方法 - Microsoft サポート
Outlook で項目を検索するのに役立つ例を使用して、検索条件を絞り込む方法を示します。
今回は、上記の対応をVBAで行います。
作成するVBAは、受信トレイやそのサブフォルダをメールの件名をCSVに出力します。
CSVに出力されれば、検索は可能です。
OutlookでVBAの作成
Outlookを起動して、キーボードの「Alt」+「F11」をします。
コードを記載します。
Sub ExportMailDetailsFromAllFoldersToCSV()
Dim olApp As Outlook.Application
Dim olNamespace As Outlook.NameSpace
Dim olFolder As Outlook.MAPIFolder
Dim filePath As String
Dim outputFile As Object
' Outlookアプリケーションを取得
Set olApp = Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")
' 受信トレイフォルダを取得
Set olFolder = olNamespace.GetDefaultFolder(olFolderInbox)
' ファイルパスを指定
filePath = "C:\Users\user\Desktop\OutlookMailDetails.csv"
' ファイルシステムオブジェクトを作成
Set outputFile = CreateObject("Scripting.FileSystemObject").CreateTextFile(filePath, True)
' CSVのヘッダを書き込み
outputFile.WriteLine "Folder,Subject,Sender,ReceivedTime"
' 受信トレイおよびすべてのサブフォルダを処理
ProcessFolder olFolder, outputFile
' ファイルを閉じる
outputFile.Close
' メッセージを表示
MsgBox "すべてのフォルダのメール詳細のエクスポートが完了しました。"
End Sub
Sub ProcessFolder(ByVal olFolder As Outlook.MAPIFolder, ByVal outputFile As Object)
Dim olItems As Outlook.Items
Dim olMail As Outlook.MailItem
Dim i As Long
Dim subjectLine As String
Dim senderName As String
Dim receivedTime As String
Dim subFolder As Outlook.MAPIFolder
' 現在のフォルダのアイテムを取得
Set olItems = olFolder.Items
' フォルダ内の全てのアイテムをループ
For i = 1 To olItems.Count
' アイテムがメールか確認
If TypeOf olItems(i) Is Outlook.MailItem Then
Set olMail = olItems(i)
' 件名、送信者、送信日時を取得してファイルに書き込み
subjectLine = olMail.Subject
senderName = olMail.senderName
receivedTime = olMail.receivedTime
outputFile.WriteLine olFolder.Name & "," & subjectLine & "," & senderName & "," & receivedTime
End If
Next i
' サブフォルダがある場合、再帰的に処理
For Each subFolder In olFolder.Folders
ProcessFolder subFolder, outputFile
Next subFolder
End Sub
コードを実行すると、デスクトップ上にCSVファイルが表示されます。
5桁未満の数字が、件名に含まれていた場合は、CSVから検索できます。
まとめ
本日は、Outlookでメールの件名をVBAで一覧取得する対応でした。
本文内の内容も検索したい場合は、カスタマイズをお願いします。