【入門編】【初心者向け】受信メールの件名からプロジェクトコードを抽出し、対応するフォルダへ自動仕分けする基本ロジック – Outlook VBA解析バイブル

スポンサーリンク

【脱・手作業】Outlook VBAで「受信メール自動仕分け」を極めるための第一歩

こんにちは。業務自動化の世界へようこそ。
日々届く山のようなメールの海で溺れていませんか?「件名を見てフォルダにドラッグ&ドロップする」という単純作業、実はこれこそがVBAが最も得意とする領域です。

今回は、単にコードを写経するのではなく、「なぜそう動くのか」という本質を理解し、あなたのメール業務を劇的に効率化する「自動仕分けロジック」を伝授します。ここをマスターすれば、Outlookはただのメールソフトから、あなたの「優秀な秘書」へと進化します。

—

1. 自動化の設計図:イベントという考え方

Outlook VBAの最大の特徴は「イベント」にあります。
「新着メールが届いた」というタイミング(イベント)をOutlookが検知し、その瞬間にプログラムを自動発火させる。この仕組みを理解するのが第一歩です。

全体像をイメージしよう

1. トリガー: 受信トレイにメールが届く (`NewMailEx` イベント)
2. 分析: 件名(Subject)をチェックする (`InStr` 関数)
3. 判断: プロジェクトコードに応じて行き先を決める (`Select Case` 文)
4. 実行: `Move` メソッドでフォルダへ移動

—

2. 実践!自動仕分けコード

以下のコードを、OutlookのVBAエディタ(`Alt + F11` で開き、`ThisOutlookSession` に貼り付け)に実装します。

‘ メール受信時に自動実行されるイベント
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim objItem As Object
Dim objMail As MailItem
Dim subjectText As String
Dim targetFolder As Folder

‘ EntryIDCollectionは複数のメールが同時に届いた場合を考慮しているため、
‘ 最初のメールを取得する
Set objItem = Session.GetItemFromID(EntryIDCollection)

‘ メールの種類がMailItem(通常のメール)か確認
If TypeOf objItem Is MailItem Then
Set objMail = objItem
subjectText = objMail.Subject

‘ 件名からコードを判定してフォルダを割り当てる
Select Case True
Case InStr(subjectText, “[PJ-A]”) > 0
Set targetFolder = GetFolder(“受信トレイ\プロジェクトA”)
Case InStr(subjectText, “[PJ-B]”) > 0
Set targetFolder = GetFolder(“受信トレイ\プロジェクトB”)
Case Else
‘ 該当なしなら何もしない
Exit Sub
End Select

‘ フォルダへ移動(移動先に同名メールがあるとエラーになるため注意)
objMail.Move targetFolder
End If
End Sub

‘ フォルダ名からフォルダオブジェクトを取得する汎用関数
Function GetFolder(folderPath As String) As Folder
Dim folders() As String
Dim i As Long
Dim currFolder As Folder

folders = Split(folderPath, “\”)
Set currFolder = Session.GetDefaultFolder(olFolderInbox).Parent

For i = LBound(folders) To UBound(folders)
Set currFolder = currFolder.Folders(folders(i))
Next
Set GetFolder = currFolder
End Function

—

3. コードの「急所」を解説

初心者の方が躓きやすいポイントを、先輩エンジニアの視点で紐解きます。

① `InStr` 関数:魔法の「文字列検索」

`InStr(検査対象文字列, 検索する文字列)` は、指定した文字列が含まれているかを確認します。0より大きければ「含まれている」と判定します。これを使うことで、完全一致ではなく「部分一致」での柔軟な振り分けが可能になります。

② `Select Case True` のトリック

通常の `Select Case 変数` ではなく、`Select Case True` を使うことで、条件式(`InStr > 0`)をそのままCase句に並べることができます。これはif文を連ねるより圧倒的にコードが読みやすく、メンテナンス性が高い手法です。

③ なぜわざわざ `GetFolder` 関数を作るのか?

Outlookのフォルダ階層はオブジェクト構造になっています。「受信トレイ」の下の「PJ-A」というフォルダを特定するには、親から順に辿る必要があります。この関数は、パスを渡すだけで目的のフォルダを確実に掴むための「汎用ツール」です。一度作れば一生モノですよ。

—

4. 陥りやすいエラーと対策

  • 「フォルダが見つかりません」エラー:
  • `GetFolder` 関数で指定したフォルダ名と、Outlook上のフォルダ名が完全に一致していますか?(スペースの有無や全角半角に注意!)
  • マクロが動かない:
  • Outlookはセキュリティ上、マクロを無効にしていることが多いです。「ファイル」>「オプション」>「セキュリティセンター」からマクロの設定を確認してください。
  • 「移動先に同名アイテムがあります」エラー:
  • 同じメールを何度もテストで移動させようとすると発生します。これは実運用ではあまり起きませんが、開発中は「移動先」を空にしておくのが鉄則です。

—

最後に:ここから先へ

このロジックをクリアしたあなたなら、次は「フラグを立てる」「特定の添付ファイルだけ保存する」「自動返信する」といった機能を追加することも容易なはずです。

VBAは、あなたの思考をそのままコードに落とし込む作業です。「面倒だな」と思った作業は、すべて自動化の種(たね)です。まずはこのコードで、あなたのメールボックスを整理整頓することから始めてみてください。

さあ、次はどんな業務を自動化しますか?応援しています。

タイトルとURLをコピーしました