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にマクロを追加してください。
VBAマクロを編集・管理するための画面(VBE)を開くには、Outlookのリボンに「開発」タブが表示されている必要があります。
もし表示されていない場合は、まず以下の記事を参考に「開発」タブを表示させてください。
Outlookの初期設定では「デジタル署名されたマクロ以外はすべて無効」となっており、自作したマクロは全て無視されてしまいます。
マクロを動作させるためには、マクロを有効にする(または実行時に警告を許可する)設定が必要です。
詳しい手順は、以下の記事内の「Outlookのマクロを使う事前準備その1 すべてのマクロを有効にする」に記載しているので、事前に設定をお願いします。
Outlookを起動し、「開発」タブをクリックしてください。

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

「Visual Basic」をクリックすると、以下のような画面が表示されます。
左上の枠の中にある「ThisOutlookSession」をクリックしてください。

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

貼り付け終えたら左上にある「上書き保存」をクリックしてください。
上書き保存ができたら右上の✕をクリックしてマクロの画面を閉じてください。
これでOutlookに差出人・件名なしメールを自動削除するVBAマクロが設定されました。

差出人・件名なしメールを自動削除する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
に変更することを強く推奨します。 変更は、コード中のTrue
をFalse
に書き換えるだけで簡単に行えます。
調整のヒント②:メールの移動先フォルダを変更する
メールの移動先フォルダも、コード冒頭の--- 設定項目 ---
で変更できます。
' 移動先フォルダ: 通常は「削除済みアイテム」でOK
Const TARGET_FOLDER As Integer = 3 ' olFolderDeletedItems (削除済みアイテム)
' 参考: olFolderJunk = 23 (迷惑メールフォルダ)
初期設定の 3
は「削除済みアイテム」フォルダです。
もし「削除済みアイテム」ではなく「迷惑メール」フォルダに振り分けたい場合は、この数値を 23
(迷惑メールフォルダを示す番号 olFolderJunk
)に書き換えます。
- 具体例: コード内の
Const TARGET_FOLDER As Integer = 3
をConst 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マクロに関するよくある質問と答えをまとめました。
その他Outlookに関する記事
その他Outlookに関する記事はこちらです。ぜひご覧ください。
-
【Outlook】メールテンプレートの作成方法と呼び出し方
こんな人にオススメの記事です 営業メールや問い合わせ対応メールを効率化したい人 フォーマットを固定してメールの送信ミスを防ぎたい人 日報や週報など定期的な報告を... -
Outlookでメールの検索結果が正しく出てこない場合の対処法
こんな人にオススメの記事です Outlookでメールを検索しても一部の検索結果が出てこない Outlookでメールを検索しても検索結果に直近のメールが出てこない Outlookでメ... -
添付されているwinmail.datの開き方6選
こんな方にオススメ winmail.datが添付されたメールが来て困っている方 winmail.datが何なのかわからない方 winmail.datの開き方を知りたい方 winmail.datを変換したい... -
Outlookのキャッシュを安全に削除する方法
こんな人にオススメの記事です Outlookの動作が遅くなったと感じる場合 Outlookが頻繁にクラッシュする場合 Outlookを使い続けていると、動作が遅くなったり、メールの... -
【Outlook】取り消し線(訂正線)を引く方法|デスクトップ版・Web版対応
こんな人にオススメの記事です デスクトップ版Outlookで、文字に取り消し線(訂正線)を引く方法を知りたい人 Web版Outlookで、文字に取り消し線(訂正線)を引く方法を... -
【Outlook】返信時に書式設定タブが表示されない原因と対処法
こんな人にオススメの記事です メール返信時に書式設定タブが見当たらない人 テキスト形式で届いたメールにHTML形式で返信したい人 HTML形式で届いたメールにテキスト形... -
Outlookのナビゲーションバーを下に表示する方法
こんな人にオススメの記事です Outlookのナビゲーションバーを下に移動させたい人 小さな画面やノートPCをOutlookを使用している人 Outlookの操作性を向上させたい人 Ou... -
Outlookで未読メールのみを簡単に表示する方法|デスクトップ版・Web版対応
こんな人にオススメの記事です 未読メールのみを瞬時に確認したい人 未読メールを見逃さず、すぐに確認したい人 整理された未読メール表示を活用し、メールチェックの負... -
【Outlook】メールをPDF化する方法|簡単4ステップ
OutlookのメールをPDF形式で保存する方法をお探しですか? 「Outlook メール PDF 保存」「Outlook メール PDF 変換」といったキーワードはもちろん、「Outlook メール P...
最後までご覧いただきありがとうございました。
このサイトは情シスマンが半径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
コメント