【入門編】【中級者向け】受信メールの重要度と本文の感情分析(簡易版)によるフラグの優先度付け – Outlook VBA解析バイブル

スポンサーリンク

Outlookを「ただのメーラー」で終わらせるな。VBAで実現する「超・自動優先度管理」の世界

こんにちは。日々のメールの海に溺れ、どれが重要でどれが後回しでいいのか分からず、貴重な集中力を浪費していませんか?

「マクロの記録」から卒業し、Outlookの深淵を覗こうとしているあなたへ。今日は、ただメールをフォルダに分けるだけの自動化ではなく、「メールの感情(キーワード)を読み取り、視覚的に優先順位を強制付与する」という、実戦的な自動化アーキテクチャを伝授します。

これをクリアすれば、あなたは「受信箱の奴隷」から「受信箱の支配者」へと進化できるはずです。さあ、始めましょう。

—

1. なぜ「イベントドリブン」が最強なのか

多くの初心者は「ボタンを押したら実行されるマクロ」から始めますが、それは真の自動化ではありません。私たちが目指すのは、メールが届いたその瞬間にシステムが自律的に判断を下す「イベントドリブン」の設計です。

Outlookには `ThisOutlookSession` という特別な場所があります。ここにある `NewMailEx` イベントを叩けば、あなたはPCの前にいなくても、Outlookが勝手にあなたの代わりに「思考」してくれます。

—

2. 実装の設計図:メールを解析し、フラグを立てる

今回は、件名や本文に特定の「危機的キーワード」が含まれている場合、自動的にフラグを立て、重要度を最大化するロジックを組みます。

ステップ:`ThisOutlookSession` にコードを埋め込む

OutlookのVBAエディタ(Alt + F11)を開き、左側のツリーから `ThisOutlookSession` をダブルクリックしてください。そこに以下のコードをコピペしましょう。

‘ メール受信時に自動でトリガーされるイベント
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim objItem As Object
Dim mail As MailItem

‘ EntryIDCollectionには複数のメールが同時に届いた場合のIDが含まれる
‘ カンマ区切りの文字列を分解して処理する
Dim entryIDs() As String
entryIDs = Split(EntryIDCollection, “,”)

For Each entryID In entryIDs
Set objItem = Application.Session.GetItemFromID(entryID)

‘ アイテムがメールであるか厳密にチェック(ここが安定性の鍵)
If TypeOf objItem Is MailItem Then
Set mail = objItem
Call ProcessEmail(mail)
End If
Next
End Sub

‘ 感情分析(簡易キーワードマッチング)とフラグ付与のロジック
Private Sub ProcessEmail(ByVal mail As MailItem)
Dim bodyText As String
bodyText = LCase(mail.Body) ‘ 大文字小文字を区別しないよう正規化

‘ 優先順位付けのロジック
‘ 「至急」「緊急」「障害」が含まれていればフラグを立てる
If InStr(bodyText, “至急”) > 0 Or InStr(bodyText, “障害”) > 0 Then
With mail
.FlagStatus = olFlagMarked ‘ フラグを立てる
.FlagRequest = “即時対応案件” ‘ フラグのテキスト設定
.Importance = olImportanceHigh ‘ 重要度:高
.Save ‘ 変更を確定(重要!)
End With
End If
End Sub

—

3. ここをクリアすれば一人前!陥りやすい罠と対策

このコードを書いて満足していると、現場で痛い目を見ます。エンジニアとして押さえておくべき「3つの鉄則」を伝授します。

① `.Save` を忘れるな

VBAでプロパティを変更しても、最後に `.Save` メソッドを呼ばなければ、その変更はメモリ上で消滅します。「動いているはずなのに反映されない!」というトラブルの9割はこれです。

② `TypeOf` で型を判定せよ

`NewMailEx` は、メールだけでなく「会議の招待」や「タスク」でも反応することがあります。`If TypeOf objItem Is MailItem Then` を挟まないと、予期せぬ型が渡された瞬間にエラーでマクロが停止します。「自分に届くのはメールだけとは限らない」という疑念が、堅牢なコードを作ります。

③ 処理の重さに注意

`NewMailEx` 内で重い処理(外部APIとの通信や巨大なファイルの解析)を行うと、Outlook全体の動作が重くなります。あくまで「瞬時に判断できるルール」を記述し、複雑な処理は別モジュールに切り出すのが、アーキテクトの嗜みです。

—

4. さあ、あなただけの「受信箱」を創り出そう

今回のコードは「簡易版」です。ここからさらに発展させるなら、以下のような拡張が可能です。

  • ホワイトリスト機能: 特定のVIPからのメールは自動で「重要フォルダ」に移動させる。
  • フラグの色分け: `mail.FlagColor` を操作して、視覚的に「赤=緊急」「青=情報共有」と分類する。
  • ログ出力: 誰からのメールを自動処理したかをテキストファイルに記録し、週次で集計する。

VBAは古臭い技術だと言う人もいますが、Officeの心臓部にこれほど密接に触れられるツールは他にありません。まずはこのコードを動かし、「自分のメールが、自分の意図した通りに自動で色を変えて並ぶ」という快感を味わってください。

ここをクリアすれば、次はAPI連携や外部データベースとの統合といった、さらに高いレイヤーへ進む準備は万端です。応援していますよ。何か詰まったら、いつでも聞きに来てください。

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