【入門編】【中級者向け】外部JSON設定ファイルから宛先ルールを読み込み、CC/BCCを動的に振り分ける柔軟な送信システム – Outlook VBA解析バイブル

スポンサーリンク

こんにちは!バックオフィスや営業現場の自動化を日々極めているエンジニアの先輩です。

マクロの記録から一歩踏み出し、「VBAでメールを自由自在に操りたい!」と思っているそこのあなた。素晴らしい着眼点です。
実務でOutlook VBAを書いていると、必ず直面する悩みがありますよね。それは…

「宛先やCCの変更があるたびに、VBAのコードを書き直してメンテナンスするのが面倒くさい!」

コードの中に直接メールアドレスを書き込む(ハードコーディングする)と、担当者の変更や宛先の追加があったときに、いちいちVBAの画面を開いてコードを修正し、テストして……と、非常に手間がかかります。

今回は、「外部のJSON設定ファイルから宛先ルールをスマートに読み込み、CCやBCCを動的に振り分ける柔軟な送信システム」の作り方を、基礎から本質まで優しく、かつプロの知見を交えて徹底解説します。

ここをクリアすれば、あなたのOutlook VBAスキルは間違いなく中級者の領域に到達します。一緒にバッチリマスターしていきましょう!

—

1. なぜ「外部JSON設定ファイル」を使うのか?

まずは設計思想のお話です。プログラミングにおいて、「プログラムのロジック(処理)」と「データ(設定値)」は完全に分離するのが鉄則です。

  • プログラム(VBA): 「どうやってメールを作るか、送るか」という仕組み。
  • データ(JSON): 「誰に、どの条件で送るか」という宛先リスト。

このように分離しておけば、宛先が変わってもVBAのコードをいじる必要は一切ありません。メモ帳などでJSONファイルをサクッと書き換えるだけでシステムが更新できるようになります。実務で求められる「メンテナンシビリティ(保守性)」の極みですね。

—

2. 準備するもの

今回は、Windows標準の機能(VBA)と、テキストファイル(JSON)だけでこの仕組みを作ります。特別なソフトのインストールは不要です。

① 設定ファイル(`mail_rules.json`)の作成

PCの適当なフォルダ(例: `C:\OutlookConfig\`)に、メモ帳などで以下の内容を貼り付けて `mail_rules.json` という名前で保存してください。

{
“department”: “営業部”,
“defaultCc”: “manager@example.com”,
“rules”: [
{
“keyword”: “【重要】”,
“additionalBcc”: “audit@example.com”
},
{
“keyword”: “【見積】”,
“additionalBcc”: “finance@example.com;estimator@example.com”
}
]
}

  • defaultCc: 常にCCに入れたい上司などのアドレス。
  • rules: 件名(Subject)に含まれるキーワードに応じて、Bccを追加するルールです。

② VBAの参照設定(超重要!)

VBAでJSONをスマートに扱うために、Windows標準の機能である 「Microsoft Scripting Runtime」 を有効化します。

1. OutlookのVBAエディタ(`Alt + F11`)を開く。
2. メニューの [ツール] > [参照設定] をクリック。
3. 一覧の中から 「Microsoft Scripting Runtime」 にチェックを入れ、「OK」を押す。

これによって、テキストファイルの読み込みやデータのDictionary(辞書)型オブジェクトが快適に使えるようになります。

—

3. 実装コードの全体像

それでは、実際にOutlook VBAに記述するコードを見ていきましょう。
今回は「新規メールを作成する際、件名に含まれるキーワードを自動検知して、外部JSONからCC/BCCを自動付与する」という実用的なプロシージャを作成します。

以下のコードを、VBAエディタの「標準モジュール」に貼り付けてください。

Option Explicit

‘ 外部JSONファイルのパス(環境に合わせて変更してください)
Private Const JSON_PATH As String = “C:\OutlookConfig\mail_rules.json”

Sub CreateSmartMailFromJSON()
Dim objItem As MailItem
Dim fso As Scripting.FileSystemObject
Dim ts As Scripting.TextStream
Dim jsonText As String

On Error GoTo ErrorHandler

‘ 1. アクティブな(今開いている、または選択している)メールアイテムを取得
‘ ※今回は新規メール作成画面を想定してMailItemを生成します
Set objItem = Application.CreateItem(olMailItem)

‘ 2. 外部JSONファイルの読み込み
Set fso = New Scripting.FileSystemObject
If Not fso.FileExists(JSON_PATH) Then
MsgBox “設定ファイルが見つかりません: ” & JSON_PATH, vbCritical
Exit Sub
End If

Set ts = fso.OpenTextFile(JSON_PATH, ForReading)
jsonText = ts.ReadAll
ts.Close

‘ 3. メールの初期設定(宛先や件名のひな形)
With objItem
.To = “client@example.com” ‘ 実際の運用ではここもJSONから取るとさらに柔軟になります
.Subject = “【見積】今期のプロジェクトについて”
.Body = “関係者各位” & vbCrLf & vbCrLf & “お疲れ様です。見積書を送付します。”

‘ 4. JSON設定値に基づいた動的なCC/BCCの振り分け処理
‘ ※VBA標準機能でJSONをパースするため、簡易的な文字列検索(InStr)を活用します

‘ (A) デフォルトCCの付与(”defaultCc”: “manager@example.com” を抽出)
Dim defaultCcAddr As String
defaultCcAddr = ExtractJsonValue(jsonText, “defaultCc”)
If defaultCcAddr <> “” Then
.CC = defaultCcAddr
End If

‘ (B) キーワードに応じたBCCの動的制御
If InStr(.Subject, “【重要】”) > 0 Then
.BCC = ExtractBccByKeyword(jsonText, “【重要】”)
ElseIf InStr(.Subject, “【見積】”) > 0 Then
.BCC = ExtractBccByKeyword(jsonText, “【見積】”)
End If

‘ 5. 画面にメールを表示(いきなり送信せず、人間が最終確認できるようにする安全設計)
.Display
End With

Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
If Not ts Is Nothing Then ts.Close
End Sub

‘ ==============================================================================
‘ 補助関数:JSONテキストから指定キーの値(文字列)を簡易抽出する関数
‘ ==============================================================================
Private Function ExtractJsonValue(json As String, key As String) As String
Dim p1 As Long, p2 As Long
Dim searchKey As String

searchkey = “””” & key & “”””
p1 = InStr(json, searchKey)
If p1 = 0 Then Exit Function

p1 = InStr(p1, json, “:”)
p1 = InStr(p1, json, “”””) + 1
p2 = InStr(p1, json, “”””)

ExtractJsonValue = Mid(json, p1, p2 – p1)
End Function

‘ ==============================================================================
‘ 補助関数:キーワードに紐づくBccアドレス群を抽出する関数
‘ ==============================================================================
Private Function ExtractBccByKeyword(json As String, keyword As String) As String
Dim p1 As Long, p2 As Long

p1 = InStr(json, keyword)
If p1 = 0 Then Exit Function

‘ キーワード以降に出現する “additionalBcc” の値を探す
p1 = InStr(p1, json, “additionalBcc”)
p1 = InStr(p1, json, “:”)
p1 = InStr(p1, json, “”””) + 1
p2 = InStr(p1, json, “”””)

ExtractBccByKeyword = Mid(json, p1, p2 – p1)
End Function

—

4. コードの解説と「知見」の共有

ここで、先輩エンジニアとしてコードの重要なポイントをいくつか解説しておきます。

① いきなり `.Send` せず `.Display` を使う理由

業務自動化の鉄則として、「重要な最終確認のプロセスを機械に奪わせてはならない」という教訓があります。誤送信を防ぐため、宛先やCC/BCCが正しく動的にセットされた状態のメール画面を `.Display` で立ち上げ、人間の目で「よし」と確認してから送信ボタンを押させるフローにするのが最も安全で実用的です。

② あえて外部ライブラリに頼らない文字列パース

VBAで本格的なJSONを扱う場合、VBScriptのRegExp(正規表現)や専用のJSONパーサークラスを導入する方法もあります。しかし、導入の手間や環境依存エラー(セキュリティソフトにブロックされる等)のリスクを考慮し、今回はVBA標準の `InStr` と `Mid` 関数を使った堅牢かつシンプルな抽出ロジックを採用しました。現場で「すぐに動く」ことの価値を重視した実務的なアプローチです。

—

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

1. 「ファイルが見つかりません」エラーが出る

  • 原因: `JSON_PATH` で指定したパスにファイルがない、またはファイル名が間違っている。
  • 対策: フォルダパス(`C:\OutlookConfig\`)が実際に存在するか、隠しファイル表示になって拡張子が `json.txt` になっていないかを確認してください。

2. CCやBCCにアドレスが反映されない

  • 原因: JSONファイルのダブルクォーテーション(`”`)やコロン(`:`)が全角になっていたり、半角抜けがある。
  • 対策: JSONの構文エラーはVBA側で検知しづらいため、一度JSONのバリデーションチェッカー(Webツール等)にコードを貼り付けて正しい構文か確認してみましょう。

—

まとめ

今回は、外部JSON設定ファイルを使ってOutlookの宛先(CC/BCC)を動的にコントロールする中級者向けのシステムをご紹介しました。

コードのハードコーディングから脱却し、「データを外に出して仕組みをスマートにする」という感覚が身につくと、VBAを書くのが何倍も楽しく、そして頼もしいスキルになります。

ぜひご自身の環境に組み込んで、日々の業務効率化を加速させてくださいね。「ここをもっとこうしたい!」というカスタマイズの疑問があれば、いつでもまた質問してください。応援しています!

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