送信済みメールと受信メールを別々のフォルダに移動するようにVBAを修正しました。
以下のコードでは、
受信メールは "受信保存フォルダ" に移動
送信メールは "送信保存フォルダ" に移動
---
VBAコード(受信と送信を別フォルダに分けて保存)
Sub MoveIMAPMailAndSentItemsSeparately()
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olIMAPInbox As Outlook.Folder
Dim olIMAPSent As Outlook.Folder
Dim olDestInbox As Outlook.Folder
Dim olDestSent As Outlook.Folder
Dim olMail As Object
Dim InboxMoveCount As Integer
Dim SentMoveCount As Integer
' Outlookアプリケーションの取得
Set olApp = Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
' IMAPアカウントの受信トレイと送信済みフォルダを取得
On Error Resume Next
Set olIMAPInbox = olNS.Folders("IMAPアカウント名").Folders("受信トレイ")
Set olIMAPSent = olNS.Folders("IMAPアカウント名").Folders("送信済みアイテム")
' 受信メールの保存先フォルダ
Set olDestInbox = olNS.Folders("新しいアカウント名").Folders("受信保存フォルダ")
' 送信メールの保存先フォルダ
Set olDestSent = olNS.Folders("新しいアカウント名").Folders("送信保存フォルダ")
On Error GoTo 0
' フォルダが存在しない場合のエラーチェック
If olIMAPInbox Is Nothing Or olIMAPSent Is Nothing Or olDestInbox Is Nothing Or olDestSent Is Nothing Then
MsgBox "フォルダが見つかりません。フォルダ名を確認してください。", vbExclamation
Exit Sub
End If
InboxMoveCount = 0
SentMoveCount = 0
' 受信トレイのメールを移動
For Each olMail In olIMAPInbox.Items
If TypeName(olMail) = "MailItem" Then
olMail.Move olDestInbox
InboxMoveCount = InboxMoveCount + 1
End If
Next olMail
' 送信済みフォルダのメールを移動
For Each olMail In olIMAPSent.Items
If TypeName(olMail) = "MailItem" Then
olMail.Move olDestSent
SentMoveCount = SentMoveCount + 1
End If
Next olMail
' メッセージ表示
MsgBox "受信メール: " & InboxMoveCount & " 件を移動しました。" & vbCrLf & _
"送信メール: " & SentMoveCount & " 件を移動しました。", vbInformation
' オブジェクト解放
Set olMail = Nothing
Set olIMAPInbox = Nothing
Set olIMAPSent = Nothing
Set olDestInbox = Nothing
Set olDestSent = Nothing
Set olNS = Nothing
Set olApp = Nothing
End Sub
---
設定のポイント
---
実行方法
1. Alt + F11 でVBAエディタを開く
2. 挿入 → 標準モジュール を選択
3. コードを貼り付け
4. Alt + F8 で MoveIMAPMailAndSentItemsSeparately を選択し 実行
---
このVBAの特徴
✅ 受信と送信を別フォルダに分類して移動
✅ フォルダ名が間違っているとエラーメッセージを表示
✅ 移動したメールの件数を表示して確認しやすい
---
追加機能の応用
日付でフィルタ → 1年以上前のメールのみ移動
特定のキーワードでフィルタ → "重要" という件名のメールだけ移動
定期実行(Application.OnTime を使用)
これで送受信のメールをそれぞれ整理できます!試してみて、うまくいかなかったらフォルダ名をチェックしてみてください。