【Outlook】差出人や件名が無いメールを自動的に削除する方法|VBAマクロですぐ解決

【Outlook】差出人や件名が無いメールを自動的に削除する方法|VBAマクロですぐ解決

Microsoft Outlook(アウトルック)をお使いで、「差出人」や「件名」が空白(空欄)のメールが受信トレイに紛れ込み、その処理に手間がかかっている、ということはありませんか?
迷惑メールフィルターをすり抜けたり、通常の仕分けルールでは対応しきれなかったりして、手動での削除が面倒だと感じている方もいらっしゃるかもしれません。

この記事では、こうした差出人不明・件名なしメールに悩まされている方へ、VBAマクロを利用して、該当するメールを新着時に自動的に「削除済みアイテム」フォルダへ振り分ける(事実上、自動削除する)具体的な方法を解説します。

このマクロを導入すれば、不要なメールを目にする機会が減り、受信トレイを整理する手間を大幅に削減できる可能性があります。

記事内では、コピー&ペーストして利用できるVBAコードの全文をご紹介し、それをOutlookに設定する手順、コードの簡単な解説とカスタマイズのヒント、そしてマクロを利用する上で非常に重要な注意点とリスクについて、順を追って詳しく説明していきます。

目次

Outlook標準機能の限界と「VBAマクロ」を使うメリット

Outlookに標準搭載されている「仕分けルール」は、多くのメール整理を自動化できる、大変便利な機能です。
しかし、「差出人名または件名が完全に空白」というピンポイントな条件だけで不要なメールを確実に、かつ自動で削除したい場合、この標準の仕分けルールだけでは対応が難しい、あるいは設定が非常に複雑になってしまうのが実情です。

なぜなら、標準のルール設定画面では「本当に何も入力されていない(スペースですらない)空白」という状態を正確に指定することが簡単ではなく、意図した通りに動作させるのが困難な場合があるためです。

この問題を解決するために、VBAマクロの活用が非常に有効となります。
VBAマクロであれば、メールが到着した直後に、プログラムが差出人名や件名の情報を直接チェックし、それが「完全に空白か」どうかを正確に判定することが可能です。

そして、条件に一致したメールだけを、即座に「削除済みアイテム」フォルダへ自動的に移動させることができます。
「仕分けルール」機能の限界を補い、特定の迷惑メール等を効率的かつ確実に処理できる点が、VBAマクロを利用する大きなメリットです。

差出人・件名なしメールを自動削除するVBAマクロコード【全文】

まず、「差出人名または件名が空白のメールを、受信時に自動的に指定フォルダ(初期設定では削除済みアイテム)へ移動させる」ためのVBAマクロコード全文をご紹介します。

このコードは、Outlookが新しいメールを受信した際に自動的に実行されるApplication_NewMailExという特別なイベントプロシージャを利用しています。
そのため、このコードは通常の「標準モジュール」ではなく、「ThisOutlookSession」という特定の場所に記述(コピー&ペースト)する必要があります。

以下がVBAコードの全文です。コピーしてご利用いただけます。

コードの冒頭にある「設定項目」で、削除条件(「件名か差出人のどちらかが空白」か「件名と差出人の両方が空白」か)や、メールの移動先フォルダ(削除済みアイテムか迷惑メールフォルダか等)を簡単に変更できるように工夫してあります。

Option Explicit

' --- 設定項目 ---
' 迷惑メール判定の条件: True = 件名か差出人のどちらか一方が空白なら削除 (リスク高)
'                       False = 件名と差出人の両方が空白の場合のみ削除 (より安全)
Const DELETE_IF_EITHER_IS_BLANK As Boolean = True ' ★True(または) / False(かつ) を選択

' 移動先フォルダ: 通常は「削除済みアイテム」でOK
Const TARGET_FOLDER As Integer = 3 ' olFolderDeletedItems (削除済みアイテム)
' 参考: olFolderJunk = 23 (迷惑メールフォルダ)
' --- 設定ここまで ---

' 新着メールイベント処理 (メール受信時に自動実行される)
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    
    Const olMail As Integer = 43 ' メールアイテムの識別番号

    ' 変数の宣言
    Dim arrEntryIDs As Variant             ' 受信メールIDの配列
    Dim objMail As Object                  ' メールアイテム用オブジェクト
    Dim targetFolderObject As Outlook.MAPIFolder ' 移動先フォルダ用オブジェクト
    Dim ns As Outlook.NameSpace            ' Outlook名前空間用オブジェクト
    Dim i As Long                          ' ループカウンター
    Dim subjectIsEmpty As Boolean          ' 件名が空白かのフラグ
    Dim senderIsEmpty As Boolean           ' 差出人が空白かのフラグ
    Dim deleteThisMail As Boolean          ' 削除対象かのフラグ

    On Error GoTo GeneralError ' マクロ全体で予期せぬエラーが起きた場合の飛び先

    ' Outlookの基本的な機能へアクセスするための準備
    Set ns = Application.GetNamespace("MAPI")
    
    ' 設定された番号に基づいて移動先フォルダを取得
    On Error Resume Next ' 特定フォルダが存在しない等のエラーを一旦無視
    Set targetFolderObject = ns.GetDefaultFolder(TARGET_FOLDER)
    On Error GoTo 0 ' エラー処理を通常に戻す

    ' 移動先フォルダが見つからなかった場合 (通常は起こり得ないが念のため)
    If targetFolderObject Is Nothing Then
        Debug.Print Now & ": 移動先フォルダ (番号 " & TARGET_FOLDER & ") が見つかりません。処理を中断します。"
        GoTo Cleanup ' 後処理にジャンプして終了
    End If

    ' 受信したメールのIDを分割して配列に入れる (複数メール同時受信対応)
    arrEntryIDs = Split(EntryIDCollection, ",")

    ' --- 受信したメールを一件ずつチェックするループ ---
    For i = LBound(arrEntryIDs) To UBound(arrEntryIDs)
        Set objMail = Nothing ' 前のループのオブジェクトをクリア

        ' メールIDからメールアイテムを取得 (失敗してもエラーで止めずに次へ)
        On Error Resume Next
        Set objMail = ns.GetItemFromID(arrEntryIDs(i))
        On Error GoTo 0 ' エラー処理を通常に戻す

        ' メールアイテムが正しく取得できた場合のみ、以下の処理を実行
        If Not objMail Is Nothing Then
            ' アイテムの種類が「メール」であるかを確認
            If objMail.Class = olMail Then
                
                ' 件名と差出人が空白かどうかをチェック (Trimで前後のスペースを除去)
                subjectIsEmpty = (Trim(objMail.Subject) = "")
                senderIsEmpty = (Trim(objMail.SenderName) = "") ' SenderNameで判定

                ' --- 削除条件の判定 ---
                deleteThisMail = False ' まず削除しないとして初期化
                If DELETE_IF_EITHER_IS_BLANK Then ' もし「どちらか空白で削除(True)」設定なら
                    If subjectIsEmpty Or senderIsEmpty Then deleteThisMail = True
                Else ' もし「両方空白で削除(False)」設定なら
                    If subjectIsEmpty And senderIsEmpty Then deleteThisMail = True
                End If
                ' --- 判定ここまで ---

                ' 削除条件に合致した場合、メールを指定フォルダへ移動
                If deleteThisMail Then
                    On Error Resume Next ' 移動時のエラー(例:アイテムがロックされている等)は無視
                    objMail.Move targetFolderObject
                    If Err.Number <> 0 Then ' 移動でエラーが発生した場合、イミディエイトウィンドウに記録を残す
                        Debug.Print Now & ": メール移動エラー: " & Err.Description & " (件名: '" & objMail.Subject & "', 差出人: '" & objMail.SenderName & "')"
                        Err.Clear
                    End If
                    On Error GoTo 0 ' エラー処理を通常に戻す
                End If
            End If
        Else
             ' メール取得自体に失敗した場合の記録 (Debug.Print)
             Debug.Print Now & ": メール取得エラー (EntryID: " & arrEntryIDs(i) & ")"
        End If
'ContinueLoop: ' エラー時のジャンプ先として使用していたが、ループのNextで自然に継続するため必須ではない
    Next i
    ' --- ループ終了 ---

' 後処理: 使用したオブジェクト変数をメモリから解放 (定型処理)
Cleanup:
    Set objMail = Nothing
    Set targetFolderObject = Nothing
    Set ns = Nothing
    Exit Sub ' サブルーチンを終了

' 一般エラーハンドラ: ループ中以外での予期せぬエラー発生時の処理
GeneralError:
    Debug.Print Now & ": マクロ実行中に予期せぬエラー発生: " & Err.Description & " (Error No: " & Err.Number & ")"
    Err.Clear ' エラー情報をクリア
    Resume Cleanup ' エラー発生時も必ず後処理を実行して終了する

End Sub

差出人・件名なしメールを自動削除するVBAマクロの設定・使い方

ここからは、ご紹介したVBAマクロを実際にOutlookに設定し、不要なメールの自動削除(指定フォルダへの移動)を開始するための具体的な使い方と設定手順を、実際の画面を使いながらわかりやすく解説していきます。

差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法

まずは、差出人・件名なしメールを自動削除するVBAマクロをOutlookに追加する方法からご紹介します。

以下の手順でOutlookにマクロを追加してください。

STEP
「開発」タブの表示

VBAマクロを編集・管理するための画面(VBE)を開くには、Outlookのリボンに「開発」タブが表示されている必要があります。
もし表示されていない場合は、まず以下の記事を参考に「開発」タブを表示させてください。

STEP
マクロの有効化

Outlookの初期設定では「デジタル署名されたマクロ以外はすべて無効」となっており、自作したマクロは全て無視されてしまいます。
マクロを動作させるためには、マクロを有効にする(または実行時に警告を許可する)設定が必要です。
詳しい手順は、以下の記事内の「Outlookのマクロを使う事前準備その1 すべてのマクロを有効にする」に記載しているので、事前に設定をお願いします。

STEP
「開発」タブをクリックする

Outlookを起動し、「開発」タブをクリックしてください。

差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step3 「開発」タブをクリックする
差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step3 「開発」タブをクリックする
STEP
「Visual Basic」をクリック

「開発」タブを開いたら一番左にある「Visual Basic」をクリックしてください。

Outlookのリボンが折りたたまれて操作しにくい場合は、「【Outlook】リボン(メニューバー)を常に表示する方法|デスクトップ版・Web版対応 」をご覧になり、リボンを常に表示に切り替えてください。

差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step4 「Visual Basic」をクリック
差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step4 「Visual Basic」をクリック
STEP
「ThisOutlookSession」をクリックする

「Visual Basic」をクリックすると、以下のような画面が表示されます。

左上の枠の中にある「ThisOutlookSession」をクリックしてください。

差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step5 「ThisOutlookSession」をクリックする
差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step5 「ThisOutlookSession」をクリックする
STEP
差出人・件名なしメールを自動削除するVBAマクロコードを貼り付ける

「ThisOutlookSession」の中に差出人・件名なしメールを自動削除するVBAマクロコードを貼り付けてください。

マクロコードをカスタマイズしたい場合は、以下の「VBAマクロの解説と調整のヒント(削除条件の変更など)」を参考に変更し、変更後のコードを貼り付けてください。

差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step6 差出人・件名なしメールを自動削除するVBAマクロコードを貼り付ける
差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step6 差出人・件名なしメールを自動削除するVBAマクロコードを貼り付ける
STEP
「上書き保存」をクリックして右上の✕をクリック

貼り付け終えたら左上にある「上書き保存」をクリックしてください。

上書き保存ができたら右上の✕をクリックしてマクロの画面を閉じてください。

これでOutlookに差出人・件名なしメールを自動削除するVBAマクロが設定されました。

差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step7 「上書き保存」をクリックして右上の✕をクリック
差出人・件名なしメールを自動削除するVBAマクロをOutlookに設定する方法 Step7 「上書き保存」をクリックして右上の✕をクリック

差出人・件名なしメールを自動削除するVBAマクロを動かしてみる

VBAマクロを設定したら、必ずOutlookを再起動してください。 これで初めてマクロ(Application_NewMailExイベント)が有効になります。

再起動後、マクロは新しいメールが届くたびに自動で動作します。手動で実行する必要はありません。

動作を確認するには、削除条件に合うテストメール(例:件名や差出人を空白にしたメール)を自分宛てに送信してみましょう。

そのメールが受信トレイではなく、指定したフォルダ(初期設定では「削除済みアイテム」)へ自動で移動すれば、設定は成功です。

もし移動しない場合は、これまでの設定(マクロ有効化、コードの場所、定数値など)を再度ご確認ください。

VBAマクロの解説と調整のヒント(削除条件の変更など)

ここでは「どのような仕組みで動いているのか」、そして「どのように動作を調整(カスタマイズ)できるのか」を、具体例を交えながら解説します。

コードの全てを理解する必要はありませんが、調整方法を知っておくと、より安全かつ便利にマクロを活用できます。

コードの主な動作

このマクロは、新しいメールがOutlookに届くと自動的に動き出します(Application_NewMailExイベント)。

そして、届いたメール一件ごとに、件名と差出人名が完全に空白かどうかをチェックし、設定された条件に合致すれば、そのメールを指定フォルダ(初期設定は「削除済みアイテム」)へ移動させる、という流れです。

エラー発生時も可能な限り処理を続ける工夫も含まれています。

調整のヒント①:削除するメールの条件を変更する(OR と AND)

このマクロで最も重要な調整箇所は、削除対象とするメールの「条件」です。
コード冒頭の--- 設定項目 ---にある以下の行で変更します。

' 迷惑メール判定の条件: True = 件名か差出人のどちらか一方が空白なら削除 (リスク高)
'                       False = 件名と差出人の両方が空白の場合のみ削除 (より安全)
Const DELETE_IF_EITHER_IS_BLANK As Boolean = True ' ★True(または) / False(かつ) を選択

True (OR条件 - 初期設定): 「件名」または(OR)「差出人名」のどちらか一方でも空白なら削除する、という条件です。

  • 例えば:
    • 差出人「ABC株式会社」、件名「」(空白) → 削除されます。
    • 差出人「」(空白)、件名「会議のお知らせ」 → 削除されます。
    • 差出人「」(空白)、件名「」(空白) → 削除されます。
  • 注意点: 多くの不要メールを削除できますが、システム通知や一部の正規メールなど、必要なメールまで誤って削除してしまうリスクが高まります

False (AND条件 - 推奨): 「件名」かつ(AND)「差出人名」の両方が空白の場合のみ削除する、という条件です。

  • 例えば:
    • 差出人「ABC株式会社」、件名「」(空白) → 削除されません。
    • 差出人「」(空白)、件名「会議のお知らせ」 → 削除されません。
    • 差出人「」(空白)、件名「」(空白) → 削除されます。
  • メリット: 誤削除のリスクを大幅に減らせるため、より安全な運用が可能です。特に理由がなければ False に変更することを強く推奨します。 変更は、コード中の TrueFalse に書き換えるだけで簡単に行えます。

調整のヒント②:メールの移動先フォルダを変更する

メールの移動先フォルダも、コード冒頭の--- 設定項目 ---で変更できます。

' 移動先フォルダ: 通常は「削除済みアイテム」でOK
Const TARGET_FOLDER As Integer = 3 ' olFolderDeletedItems (削除済みアイテム)
' 参考: olFolderJunk = 23 (迷惑メールフォルダ)

初期設定の 3 は「削除済みアイテム」フォルダです。
もし「削除済みアイテム」ではなく「迷惑メール」フォルダに振り分けたい場合は、この数値を 23 (迷惑メールフォルダを示す番号 olFolderJunk)に書き換えます。

  • 具体例: コード内の Const TARGET_FOLDER As Integer = 3Const TARGET_FOLDER As Integer = 23 と書き換えて保存すれば、条件に一致したメールは「削除済みアイテム」ではなく「迷惑メール」フォルダに直接移動するようになります。

これらの設定項目をご自身の使い方に合わせて調整することで、マクロをより便利かつ安全に利用できます。

特に削除条件(DELETE_IF_EITHER_IS_BLANK)の設定は誤削除リスクに直結しますので、慎重にご検討ください。

【重要】VBAマクロ実行前の注意点とリスク

ご紹介したVBAマクロは便利ですが、メールを自動的に削除(移動)する強力な機能です。
実行する前には、以下の重要な注意点とリスクを必ずご理解いただき、慎重にご利用ください。

1. 必要なメールの誤削除リスク(最重要
まず、必要なメールまで意図せず削除してしまう危険性があります。
特に初期設定のOR条件(件名か差出人どちらか空白で削除)では、システム通知や一部メーリングリストなど、大切なメールも対象になることがあります。
安全のため、コードの削除条件をAND条件(件名と差出人の両方が空白の場合のみ削除)に変更(定数をFalseに設定)することを強く推奨します。
また、最初は「迷惑メール」フォルダへ移動させる設定でテスト運用するのも良い方法です。

2. データの完全削除リスク
次に、マクロで「削除済みアイテム」や「迷惑メール」フォルダに移動されたメールは、最終的に完全に削除される可能性があることを覚えておいてください。特に、削除済みアイテムを自動で削除する設定が有効になっている場合は注意が必要です。
完全に削除されると、元に戻すのは困難です。

3. 予期せぬエラーの可能性
基本的なエラー対策はコードに含まれていますが、あらゆる状況に対応できるわけではありません。
まれにエラーが発生したり、意図通りに動作しなかったりする可能性もあることをご理解ください。

4. バックアップの推奨
このような万が一の事態に備え、マクロ実行前には必ずOutlookデータファイルのバックアップを取得してください。
Outlookのデータファイルの保存先については「修復対象のデータファイル(pstファイル)はどこにあるか」でわかりやすく解説してきます。

5. コードの基本動作の理解
最後に、実行するマクロが「どのような条件で」「何をするのか」を、この記事の解説などで最低限把握しておくことが、安全利用の第一歩となります。

本記事で紹介するVBAマクロの使用は、利用者ご自身の判断と責任において行ってください。
マクロの実行によって生じたいかなる直接的・間接的な損害(データの損失を含む)については責任を負いかねますので、ご了承ください。

差出人や件名が無いメールを自動的に削除するVBAマクロに関するよくある質問と答え

差出人や件名が無いメールを自動的に削除するVBAマクロに関するよくある質問と答えをまとめました。

このマクロで、迷惑メールではない重要なメールまで削除されてしまう危険性はありますか?

はい、その危険性はあります。特にコード初期設定のOR条件(DELETE_IF_EITHER_IS_BLANK = True)では、件名か差出人名のどちらか一方でも空白だと削除対象になるため、システム通知など必要なメールまで削除されるリスクが比較的高まります。

誤削除のリスクを最小限に抑えるには、どう設定するのが一番安全ですか?

最も推奨される安全な設定は、コード冒頭の削除条件をAND条件(DELETE_IF_EITHER_IS_BLANK = False)に変更することです。
これにより、「件名」と「差出人名」の両方が空白のメールのみが削除対象となり、誤削除のリスクを大幅に減らすことができます。

マクロで削除(移動)されたメールは完全に消えてしまうのですか? 復元できますか?

初期設定ではメールは「削除済みアイテム」に移動されます。
このフォルダ内にある間は、通常の削除メールと同様に元に戻す(移動させる)ことが可能です。
ただし、「削除済みアイテム」を空にした場合や、設定で自動クリーンアップが有効な場合は、完全に削除され復元が困難になります。特に、削除済みアイテムを自動で削除する設定が有効になっている場合は注意が必要です。
移動先を「迷惑メール」フォルダにした場合も同様のリスクがあります。

このマクロが予期せぬエラーを起こして、Outlookに悪影響を与える可能性はありますか?

提示したコードには基本的なエラー処理が含まれているため、マクロ自体が原因でOutlook全体に深刻な悪影響を与える可能性は低いと考えられます。
しかし、予期せぬエラーが絶対に起きないとは断言できません。そのため、事前のバックアップ取得を推奨しています。

このマクロはいつ動作するのですか?

このマクロはApplication_NewMailExというイベントを利用しているため、Outlookが新しいメールを受信トレイ(または初期の受信場所)に受け取った直後に、自動的に動作を開始します。
メールを開いたり、手動で操作したりする必要はありません。

削除条件の「空白」とは、スペースだけの場合も削除対象になりますか?

はい、対象になります
コード内でTrim関数を使用しているため、件名や差出人名がスペース文字だけで構成されている場合も「空白」と判断され、削除条件(ORまたはAND)に合致すれば削除(移動)対象となります。

「差出人名」が空白でも、メールアドレス自体は存在する場合も削除されますか?

はい、削除対象になる可能性があります。
このコードはメールのSenderNameプロパティ(表示される差出人名)が空白かどうかで判定しています。そのため、メールアドレス(SenderEmailAddress)が設定されていても、SenderNameが空白であれば、削除条件(特にOR条件の場合)に合致することがあります。

受信トレイではなく、自分で設定した他のフォルダ(例:特定のサブフォルダ)に直接届くメールも、このマクロの対象になりますか?

いいえ、通常は対象になりません
Application_NewMailExイベントは、基本的にOutlookの既定の受信プロセス(受信トレイへの到着)に対して発生します。
サーバー側のルールや他のクライアント側ルールで最初から別フォルダに振り分けられたメールは、このマクロのチェックを通過しない可能性が高いです。

既に受信済みで、受信トレイに溜まっている古いメールにも、このマクロは適用されますか?

いいえ、適用されません
このマクロはApplication_NewMailExイベント、つまり「新しくメールが届いた」という出来事をきっかけに動作します。
過去に受信したメールに対して、後から遡って処理を実行する機能はありません。

Outlookの迷惑メールフィルターで「迷惑メール」フォルダに振り分けられたメールも、このマクロで削除されますか?

いいえ、通常は削除されません
多くの場合、Outlook標準の迷惑メールフィルター処理はApplication_NewMailExイベントよりも先に実行されます。
そのため、迷惑メールフォルダに直接振り分けられたメールは、このマクロのチェック対象外となります。

移動先を「削除済みアイテム」フォルダから「迷惑メール」フォルダに変更するにはどうすればいいですか?

コード冒頭の--- 設定項目 ---にある Const TARGET_FOLDER As Integer = 3 という行の、数値 323 に書き換えて保存し、Outlookを再起動してください。(3が削除済みアイテム、23が迷惑メールフォルダの番号です。)

設定したはずなのに、マクロが全く動作していないようです。何を確認すればいいですか?

まずOutlookを再起動したか確認してください。次にマクロのセキュリティ設定が有効になっているか、コードがThisOutlookSessionに正しく記述・保存されているか、コード冒頭の定数設定(特にDELETE_IF_EITHER_IS_BLANK)が意図通りか、などを順番に再確認してみてください。

このマクロをOutlookから完全に削除(アンインストール)するにはどうすればいいですか?

貼り付けたコード全文を削除し、上書き保存してください。
そしてOutlookを再起動すれば、マクロは動作しなくなります。

Mac版やWeb版/スマホ版のOutlookで、このVBAマクロは使えますか?

Mac版OutlookはVBAに対応していますが、Windows版と完全に互換性があるとは限らないため動作は保証できません
Outlook on the web (Web版Outlook) およびスマートフォン・タブレット版のOutlookアプリでは、VBAマクロが非対応のため利用できません

その他Outlookに関する記事

その他Outlookに関する記事はこちらです。ぜひご覧ください。

最後までご覧いただきありがとうございました。
このサイトは情シスマンが半径3m以内のITに関する情報を掲載してるサイトです。
Windows系を主として、ソフトや周辺機器の操作や設定について画像も用いながらわかりやすく解説しています。

解説している内容に誤りがあった場合や、補足が必要な場合、もっと知りたい場合はこちらのお問い合わせフォームからご連絡ください。
個人の方を限定にサポートさせていただきます。

実行環境
Windows11 Home 24H2
64 ビット オペレーティング システム
11th Gen Intel(R) Core(TM) i7-11375H @ 3.30GHz 3.30 GHz
16.0 GB RAM
Microsoft 365

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次