savePath = "C:\メール履歴\" ってところは?」InputBox ってやつで、画面にポップアップが出るわけやな?」For Each item In folder.Items ってある!出たな、ループ!」Replace ってのがいっぱい並んでるけど、これ何?めちゃくちゃしつこいねんけど!」mail.Attachments.Count > 0 ってのは?」Print #fileNum ってところで、ノート(テキストファイル)に書き写してるん?」Close)んや!」MsgBox)を出して、ハッピーエンドや!」Dim outlookApp As Outlook.Application
Dim ns As Outlook.NameSpace
Dim folder As Outlook.MAPIFolder
Dim item As Object
Dim mail As Outlook.MailItem
Dim targetSender As String
Dim savePath As String
Dim filePath As String
Dim cleanedSubject As String
Dim fileName As String
Dim attachMarker As String
Dim fileNum As Integer
Dim matchCount As Integer
Dim fso As Object
' ==== 【重要】ここに保存したいフォルダのパスを入力してください ====
' ※末尾には必ず「\」を付けてください
savePath = "C:\メール履歴\"
' ==================================================================
' フォルダが存在するか確認し、なければ自動作成する
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(savePath) Then
On Error Resume Next
fso.CreateFolder(savePath)
On Error GoTo 0
' 作成に失敗した場合の安全対策
If Not fso.FolderExists(savePath) Then
MsgBox "指定されたフォルダ 「" & savePath & "」 が存在せず、作成もできませんでした。パスを確認してください。", vbCritical
Exit Sub
End If
End If
' ポップアップで抽出したい相手を入力させる
targetSender = InputBox("抽出したい相手の「メールアドレス」または「名前」を入力してください。", "差出人の指定")
' キャンセルボタンが押されたか、何も入力されなかった場合は終了
If Trim(targetSender) = "" Then
MsgBox "処理をキャンセルしました。", vbExclamation
Exit Sub
End If
Set outlookApp = New Outlook.Application
Set ns = outlookApp.GetNamespace("MAPI")
' 現在開いているフォルダーを対象にする
Set folder = outlookApp.ActiveExplorer.CurrentFolder
matchCount = 0
' フォルダー内のアイテムをループ処理
For Each item In folder.Items
If TypeOf item Is MailItem Then
Set mail = item
' 差出人の判定
If InStr(mail.SenderEmailAddress, targetSender) > 0 Or InStr(mail.SenderName, targetSender) > 0 Then
matchCount = matchCount + 1
' 件名からファイル名に使えない禁止文字(\ / : * ? " < > |)を削除
cleanedSubject = mail.Subject
cleanedSubject = Replace(cleanedSubject, "\", ""): cleanedSubject = Replace(cleanedSubject, "/", "")
cleanedSubject = Replace(cleanedSubject, ":", ""): cleanedSubject = Replace(cleanedSubject, "*", "")
cleanedSubject = Replace(cleanedSubject, "?", ""): cleanedSubject = Replace(cleanedSubject, """", "")
cleanedSubject = Replace(cleanedSubject, "<", ""): cleanedSubject = Replace(cleanedSubject, ">", "")
cleanedSubject = Replace(cleanedSubject, "|", "")
' 添付ファイルの有無をチェック(あれば ●、なければ 空白)
If mail.Attachments.Count > 0 Then
attachMarker = "●"
Else
attachMarker = ""
End If
' ファイル名を作成(差出人名_●件名_年月.txt)
fileName = mail.SenderName & "_" & attachMarker & cleanedSubject & "_" & Format(mail.ReceivedTime, "yyyymm") & ".txt"
filePath = savePath & fileName
' 個別のテキストファイルを開いて書き込み
fileNum = FreeFile
Open filePath For Output As #fileNum
Print #fileNum, "【日付】 " & mail.ReceivedTime
Print #fileNum, "【タイトル】 " & mail.Subject
Print #fileNum, "【メール内容】"
Print #fileNum, mail.Body
Close #fileNum
End If
End If
Next item
' 結果の通知
If matchCount > 0 Then
MsgBox matchCount & " 件のメールを 「" & savePath & "」 に保存しました!", vbInformation
Else
MsgBox "該当するメールが見つかりませんでした。", vbExclamation
End If
End Sub
Dim outlookApp As Outlook.Application
Dim ns As Outlook.NameSpace
Dim folder As Outlook.MAPIFolder
Dim item As Object
Dim mail As Outlook.MailItem
Dim targetSender As String
Dim startDateInput As String, endDateInput As String
Dim startDate As Date, endDate As Date
Dim savePath As String
Dim filePath As String
Dim cleanedSubject As String
Dim fileName As String
Dim attachMarker As String
Dim fileNum As Integer
Dim matchCount As Integer
Dim fso As Object
' ==== 【重要】ここに保存したいフォルダのパスを入力してください ====
' ※末尾には必ず「\」を付けてください
savePath = "C:\メール履歴\"
' ==================================================================
' フォルダが存在するか確認し、なければ自動作成する
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(savePath) Then
On Error Resume Next
fso.CreateFolder(savePath)
On Error GoTo 0
' 作成に失敗した場合の安全対策
If Not fso.FolderExists(savePath) Then
MsgBox "指定されたフォルダ 「" & savePath & "」 が存在せず、作成もできませんでした。パスを確認してください。", vbCritical
Exit Sub
End If
End If
' ポップアップで抽出したい相手を入力させる
targetSender = InputBox("抽出したい相手の「メールアドレス」または「名前」を入力してください。", "差出人の指定")
If Trim(targetSender) = "" Then
MsgBox "処理をキャンセルしました。", vbExclamation
Exit Sub
End If
' 【変更】開始日の入力(初期値は今日の日付)
startDateInput = InputBox("抽出する【開始日】を入力してください。" & vbCrLf & "(例: 2026/01/01)", "開始日の指定", Format(Date, "yyyy/mm/dd"))
If Trim(startDateInput) = "" Then MsgBox "処理をキャンセルしました。", vbExclamation: Exit Sub
If Not IsDate(startDateInput) Then
MsgBox "正しい日付を入力してください。処理を終了します。", vbCritical
Exit Sub
End If
' 開始日の「00:00:00」として設定
startDate = CDate(startDateInput)
' 【変更】終了日の入力(初期値は今日の日付)
endDateInput = InputBox("抽出する【終了日】を入力してください。" & vbCrLf & "(例: 2026/01/31)", "終了日の指定", Format(Date, "yyyy/mm/dd"))
If Trim(endDateInput) = "" Then MsgBox "処理をキャンセルしました。", vbExclamation: Exit Sub
If Not IsDate(endDateInput) Then
MsgBox "正しい日付を入力してください。処理を終了します。", vbCritical
Exit Sub
End If
' 終了日の「23:59:59」まで含めるために、翌日の00:00:00未満という条件で判定します
endDate = DateAdd("d", 1, CDate(endDateInput))
Set outlookApp = New Outlook.Application
Set ns = outlookApp.GetNamespace("MAPI")
' 現在開いているフォルダーを対象にする
Set folder = outlookApp.ActiveExplorer.CurrentFolder
matchCount = 0
' フォルダー内のアイテムをループ処理
For Each item In folder.Items
If TypeOf item Is MailItem Then
Set mail = item
' 差出人の判定 + 受信日時の判定(開始日0:00以上、かつ終了日の翌日0:00未満)
If (InStr(mail.SenderEmailAddress, targetSender) > 0 Or InStr(mail.SenderName, targetSender) > 0) And _
(mail.ReceivedTime >= startDate And mail.ReceivedTime < endDate) Then
matchCount = matchCount + 1
' 件名からファイル名に使えない禁止文字(\ / : * ? " < > |)を削除
cleanedSubject = mail.Subject
cleanedSubject = Replace(cleanedSubject, "\", ""): cleanedSubject = Replace(cleanedSubject, "/", "")
cleanedSubject = Replace(cleanedSubject, ":", ""): cleanedSubject = Replace(cleanedSubject, "*", "")
cleanedSubject = Replace(cleanedSubject, "?", ""): cleanedSubject = Replace(cleanedSubject, """", "")
cleanedSubject = Replace(cleanedSubject, "<", ""): cleanedSubject = Replace(cleanedSubject, ">", "")
cleanedSubject = Replace(cleanedSubject, "|", "")
' 添付ファイルの有無をチェック(あれば ●、なければ 空白)
If mail.Attachments.Count > 0 Then
attachMarker = "●"
Else
attachMarker = ""
End If
' ファイル名を作成(差出人名_●件名_年月.txt)
fileName = mail.SenderName & "_" & attachMarker & cleanedSubject & "_" & Format(mail.ReceivedTime, "yyyymm") & ".txt"
filePath = savePath & fileName
' 個別のテキストファイルを開いて書き込み
fileNum = FreeFile
Open filePath For Output As #fileNum
Print #fileNum, "【日付】 " & mail.ReceivedTime
Print #fileNum, "【タイトル】 " & mail.Subject
Print #fileNum, "【メール内容】"
Print #fileNum, mail.Body
Close #fileNum
End If
End If
Next item
' 結果の通知
If matchCount > 0 Then
MsgBox matchCount & " 件のメールを 「" & savePath & "」 に保存しました!", vbInformation
Else
MsgBox "該当するメールが見つかりませんでした。", vbExclamation
End If
End Sub