【入門編】【中級者向け】複数のOutlookアカウントを切り替えて送信する際、送信元(SentOnBehalfOfName)を動的に判定するロジック – Outlook VBA解析バイブル

スポンサーリンク

【Outlook VBA】送信元を自由自在に操る!複数アカウント運用の極意

こんにちは。自動化の深淵へようこそ。
日々、手作業でメールの「差出人」をポチポチ切り替えていませんか?その作業、Outlook VBAを使えば一瞬で、かつミスなく自動化できます。

今回は、単なるメール送信を超えて、「Excelのフラグに基づき、送信元(SentOnBehalfOfName)を動的に切り替える」という、中級者への登竜門となるテクニックを伝授します。

—

1. なぜ「SentOnBehalfOfName」が重要なのか?

Outlookには複数のアカウント(エイリアスや共有メールボックス)が登録されていることが一般的です。しかし、VBAで単に `MailItem.Send` を呼ぶだけでは、常に「既定のアカウント」で送信されてしまいます。

ここで登場するのが `SentOnBehalfOfName` プロパティです。
これは、「誰の名前で送るか」を指定するプロパティ。これさえ掌握すれば、顧客対応用、社内周知用、プロジェクト専用アドレスを、Excelのデータ一つで瞬時に使い分けられるようになります。

—

2. 実装の設計思想:なぜ「動的」にするのか

コードを書くとき、「アカウント名をハードコーディング(直書き)」してはいけません。それではメンテナンス地獄が待っています。

「Excelに定義表を作り、それをVBAで読み込む」

この疎結合な設計こそが、変更に強く、誰が触っても壊れない「プロの自動化」です。

用意するもの(Excelシートのイメージ)

| フラグ(A列) | 送信元アドレス(B列) |
| :— | :— |
| Sales | sales@example.com |
| Support | support@example.com |

—

3. 実践!アカウント切り替えロジック

それでは、核心となるコードを見ていきましょう。

Sub CreateDynamicMail()
Dim olApp As Object
Dim olMail As Object
Dim sendAs As String

‘ 1. Excelから送信元アドレスを取得(例:アクティブセルの値など)
‘ ここでは便宜上、変数に格納します
sendAs = “support@example.com”

‘ 2. Outlookアプリケーションへの接続
Set olApp = CreateObject(“Outlook.Application”)
Set olMail = olApp.CreateItem(0) ‘ 0 = olMailItem

With olMail
‘ 【重要】ここが魔法のプロパティ
‘ 送信元アドレスを動的に指定します
.SentOnBehalfOfName = sendAs

.To = “client@example.com”
.Subject = “【自動送信】テストメール”
.Body = “いつもお世話になっております。”

‘ 表示して確認したい場合は .Display、即送信なら .Send
.Display
End With

‘ メモリ解放の作法(オブジェクトのライフサイクル管理)
Set olMail = Nothing
Set olApp = Nothing
End Sub

—

4. 陥りやすい罠と解決策

罠1:権限がありません(エラー番号: 287)

「送信権限がないアカウント」を指定すると、Outlookは即座にエラーを返します。
対策: `SentOnBehalfOfName` に指定するアドレスは、あなたのOutlookで「代理送信権限」が許可されているものに限られます。まずは手動のメール作成画面で、そのアドレスが選択可能か確認しましょう。

罠2:署名が消える

`olMail.Body` を指定すると、標準の署名が消えてしまうことがあります。
対策: `olMail.Display` を先に実行してから `HTMLBody` を編集するようにしてください。`Display` することでOutlookが署名を自動挿入してくれるため、その後に本文を追記するテクニックが有効です。

—

5. 次のステージへ:プロのエンジニアとして

今回のロジックをマスターすれば、次は「メールのテンプレート化」や「添付ファイルの動的添付」へと拡張できます。

ここをクリアすれば、Outlook VBAの基本はバッチリです。

自動化の本質は、「機械にできることは機械に任せ、自分はより創造的な業務に没頭すること」にあります。コードを書く時間は、未来の自分が楽をするための「投資」です。

もしコードが動かないときは、`Set` を忘れていないか、あるいは参照設定のミスがないか、一歩引いてオブジェクトのライフサイクルを見つめ直してみてください。

あなたの自動化ライフが、より効率的で快適なものになりますように。応援しています!

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