【入門編】【中級者向け】外部のJSON設定ファイルを読み込み、宛先やCCのグループ分けを動的に変更する柔軟な送信システム – Outlook VBA解析バイブル

スポンサーリンク

Outlook VBAを「設定ファイル」で操る。ハードコーディングからの卒業。

こんにちは。日々のルーチンワークに追われ、「またこの宛先にメールを送るのか…」とため息をついているあなたへ。

マクロの記録を卒業し、VBAを自在に操るエンジニアへの第一歩を踏み出しましょう。今日お話しするのは、「ソースコードの中に宛先を直書き(ハードコーディング)しない」という、プロの現場では常識とされる設計思想です。

コードをいじるたびにVBAエディタを開くのはもう終わり。外部のJSON設定ファイルを書き換えるだけで、宛先やCCが自由自在に変わる「賢い送信システム」を構築します。

—

1. なぜ「ハードコーディング」を避けるべきなのか?

初学者が最初に陥る罠が、`MailItem.To = “tanaka@example.com”` のように宛先をコードに直書きすることです。

  • 保守性の欠如: 人事異動で担当者が変わるたびに、コードを書き換えて保存して……と繰り返すのは時間の浪費です。
  • 安全性の低さ: 開発者がコードを理解していない第三者だと、誤って重要なロジックを破壊する恐れがあります。

「設定(データ)」と「ロジック(プログラム)」を分離する。これが、大規模な業務自動化を支えるための鉄則です。

—

2. 準備:JSONを読み込むための魔法の道具

VBAは標準ではJSONを直接解釈できません。しかし、Windowsの資産である「ScriptControl」を使えば、Webの標準規格であるJSONを簡単にパース(解析)できます。

まずは設定ファイル `config.json` を適当なフォルダ(例: `C:\AutoMail\config.json`)に用意してください。

{
“ProjectA”: {
“To”: “lead@example.com”,
“CC”: “member1@example.com;member2@example.com”
},
“ProjectB”: {
“To”: “manager@example.com”,
“CC”: “assistant@example.com”
}
}

—

3. 実践!動的メール送信エンジン

それでは、このJSONを読み込み、状況に応じて宛先を切り替えるコードを書いていきましょう。

実装コード

‘ 参照設定は不要です。ScriptControlを活用します
Sub SendDynamicMail(projectName As String)
Dim jsonText As String
Dim sc As Object
Dim config As Object
Dim mail As MailItem

‘ 1. JSONファイルを読み込む
jsonText = ReadTextFile(“C:\AutoMail\config.json”)

‘ 2. ScriptControlでJSONをオブジェクト化
Set sc = CreateObject(“ScriptControl”)
sc.Language = “JScript”
‘ JSONをパースするためのJSコードを注入
sc.Eval “var data = ” & jsonText

‘ 3. 指定したプロジェクトの設定を取得
Set config = sc.Eval(“data.” & projectName)

‘ 4. メール作成
Set mail = Application.CreateItem(olMailItem)
With mail
.To = config.To
.CC = config.CC
.Subject = “【自動送信】” & projectName & “に関する報告”
.Body = “プロジェクトチームの皆様” & vbCrLf & “本日の進捗を報告します。”
.Display ‘ まずは確認のため表示(送信時は .Send に変更)
End With
End Sub

‘ テキストファイルを読み込む汎用関数
Function ReadTextFile(path As String) As String
Dim fso As Object: Set fso = CreateObject(“Scripting.FileSystemObject”)
ReadTextFile = fso.OpenTextFile(path, 1).ReadAll
End Function

—

4. プロの視点:陥りやすいエラーと対策

このコードを書く際、初心者が必ずと言っていいほど躓くポイントがあります。

① オブジェクトのライフサイクル管理

`CreateObject` を繰り返すとメモリリークの原因になります。今回は簡易的な例ですが、複雑なシステムを作る際は、使用が終わったオブジェクトを `Set obj = Nothing` で明示的に解放する癖をつけましょう。

② JSONの階層が深い場合

`sc.Eval` は非常に強力ですが、存在しないキーにアクセスするとエラーで止まります。本番環境では `On Error Resume Next` を使い、設定値が取得できなかった場合に「デフォルト宛先」へ送るなどの例外処理(ガード節)を組み込むことが不可欠です。

③ セキュリティ警告への対応

Outlookの仕様上、VBAからメールを大量送信しようとすると、「プログラムがメールを送信しようとしています」という警告が出ることがあります。これはOutlookの「プログラムによるアクセス」設定か、セキュリティソフト側の制御によります。業務用PCであれば、情シス部門と相談して許可を得るのが正攻法です。

—

最後に:ここをクリアすれば、あなたはもう中級者

今回の手法をマスターすれば、宛先リストだけでなく、メールのテンプレート文面や、送信先のグループIDなどもすべてJSONで管理できるようになります。

「コードを触らずに、設定ファイルだけで業務を制御する」。
これが、エンジニアリングの粋であり、あなたの自動化ツールを「使い捨てのスクリプト」から「堅牢な業務システム」へと進化させる鍵です。

さあ、次はどの作業を自動化しますか?あなたの挑戦を応援しています。

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