【入門編】Application.Session.CurrentUser.AddressEntryを用いた、現在のユーザーのメールアドレスと表示名の動的取得 – Outlook VBA解析バイブル

スポンサーリンク

こんにちは!Outlook VBAの世界へようこそ。
マクロの記録ボタンを押すだけのステージから一歩進み、自分の手でコードを書いてOutlookを意のままに操りたい――そう思われたなら、あなたはもう立派な自動化エンジニアの卵です。

今回は、Outlook VBAの基本中の基本であり、実務で最も頻繁に利用する「現在Outlookを動かしているユーザー自身の情報(メールアドレスや表示名)を動的に取得する方法」について解説します。

「自分宛てのメールを自動生成したい」「送信者の名前やアドレスをログに自動で残したい」といったシーンで、このテクニックは絶対に欠かせません。

ここをクリアすれば、Outlook VBAのオブジェクトモデルの考え方がスッと腑に落ちるはずですよ。さあ、一緒に扉を開けていきましょう!

1. なぜ「ハードコーディング」ではなく「動的取得」なのか?

業務効率化のマクロを作るとき、やってしまいがちなのがコレです。

‘ 駄目な例:自分のメールアドレスを直接書き込んでいる
.SenderEmailAddress = “yamada.taro@example.com”

一見すると動いているように見えますが、これでは人事異動で担当者が変わった時や、他のメンバーにこのマクロを配った時にすべてが破綻します。「動かない!」と慌ててコードを書き直すはめになりますよね。

プロのエンジニアが作るマクロは、環境が変わっても「今、誰がこのボタンを押したか」をOutlook自身に聞き出し、自動で適応する(動的取得する)ように作られています。それを叶えてくれるのが、今回主役に据える `Application.Session.CurrentUser.AddressEntry` です。

2. Outlookオブジェクトモデルの構造を覗いてみよう

Outlook VBAのコードは、お決まりの「階層構造(マトリョーシカのようなもの)」をたどって目的のデータにアクセスします。

今回の旅のルートを、まずは地図で確認しておきましょう。

[Application] (Outlookアプリそのもの)
└─ [Session (NameSpace)] (現在のセッション・プロファイル)
└─ [CurrentUser] (今ログインしているユーザー)
└─ [AddressEntry] (そのユーザーのアドレス帳エントリ)
├─ .Name (表示名:山田 太郎 など)
└─ .GetExchangeUser / .Address (メールアドレス)

「ほうほう、一番上の親玉である `Application` から、現在のセッションを挟んで、ユーザーにたどり着くんだな」とイメージできればバッチリです。

3. 【実践】現在のユーザー情報を取得するVBAコード

それでは、実際にエディタを開いて記述する実用コードを見てみましょう。
そのままコピペして、OutlookのVBAエディタ(`Alt + F11` で開けます)の標準モジュールに貼り付ければすぐに動かせます。

Option Explicit

Sub ShowCurrentUserInfo()
‘ =========================================================================
‘ 目的: 現在Outlookを操作しているユーザーの表示名とメールアドレスを取得する
‘ =========================================================================

Dim objNamespace As Outlook.NameSpace
Dim objUser As Outlook.AddressEntry
Dim exUser As Outlook.ExchangeUser
Dim userDisplayName As String
Dim userEmailAddress As String

‘ 1. セッション(NameSpace)を取得する
‘ Application.Session または Application.GetNamespace(“MAPI”) で取得可能です
Set objNamespace = Application.Session

‘ 2. 現在のユーザーのアドレスエントリを取得する
Set objUser = objNamespace.CurrentUser

‘ 3. 表示名を取得
userDisplayName = objUser.Name

‘ 4. メールアドレスの取得(※ここがOutlook VBAの最大の罠ポイント!)
‘Exchange環境(会社のアカウントなど)か、POP/IMAP環境(個人設定など)かで取得方法が変わります
On Error Resume Next
Set exUser = objUser.GetExchangeUser

If Not exUser Is Nothing Then
‘ 会社等のExchange / Microsoft 365 アカウントの場合
userEmailAddress = exUser.PrimarySmtpAddress
Else
‘ プロキシやPOP/IMAP、Outlook.comなどの場合
userEmailAddress = objUser.Address
End If
On Error GoTo 0 ‘ エラートラップを解除

‘ 5. 結果をメッセージボックスで出力する
MsgBox “【現在のログインユーザー情報】” & vbCrLf & _
“表示名: ” & userDisplayName & vbCrLf & _
“メールアドレス: ” & userEmailAddress, _
vbInformation, “動的取得テスト”

‘ オブジェクトの解放(メモリ管理の基本)
Set exUser = Nothing
Set objUser = Nothing
Set objNamespace = Nothing

End Sub

コードのここが重要!

  • `Option Explicit` のお約束

一番上にこれを書くことで、変数の宣言漏れによるバグを防ぎます。プロへの第一歩はここからです。

  • メールアドレス取得の分岐(罠の回避)

Outlook VBAで最もハマりやすいのが「メールアドレスの取得方法」です。
社内のExchange環境(Microsoft 365など)では、単に `.Address` を叩くと、不格好な内部ID(`/o=First Organization/…` のような文字列)が返ってきてしまい、肝心のメールアドレスが取れません。そのため、一度 `GetExchangeUser` オブジェクトに変換し、`PrimarySmtpAddress` を引くという一手間が必要になります。ここを知っているだけで、あなたもう中級者以上です!

4. 応用編:新規メール作成時に自分の名前を自動で「差出人/署名」に組み込む

知識は使ってこそ価値があります。先ほど覚えたテクニックをベースに、「ボタン一つで、宛先や本文の最初に自分の情報を差し込んだ新規メールを作成するマクロ」に仕立て上げてみましょう。

Sub CreateNewMailWithMyInfo()
Dim objMail As Outlook.MailItem
Dim objNamespace As Outlook.NameSpace
Dim objUser As Outlook.AddressEntry
Dim senderName As String

‘ ユーザー名の取得
Set objNamespace = Application.Session
Set objUser = objNamespace.CurrentUser
senderName = objUser.Name

‘ 新規メールアイテムの作成
Set objMail = Application.CreateItem(olMailItem)

With objMail
‘ 宛先や件名の初期設定
.To = “” ‘ 必要に応じて固定の宛先を入れることも可能
.Subject = “【報告】” & senderName & “からの連絡事項”

‘ 本文の自動生成(動的に取得した自分の名前を差し込む)
.Body = senderName & ” です。” & vbCrLf & _
vbCrLf & _
“お疲れ様です。本日の進捗についてご報告いたします。” & vbCrLf & _
“————————————————–” & vbCrLf & _
vbCrLf & _
“————————————————–”

‘ 画面にメールを表示する(いきなり送信せず、確認させるのが安全設計の基本)
.Display
End With

‘ オブジェクトの解放
Set objMail = Nothing
Set objUser = Nothing
Set objNamespace = Nothing

End Sub

まとめ:ここをクリアすればOutlook VBAは怖くない!

お疲れ様でした!今回は `Application.Session.CurrentUser.AddressEntry` を軸に、ログインユーザーの情報を動的に取得する方法と、その実用的な活用法を見てきました。

1. ハードコーディングを避け、`Application.Session.CurrentUser` で動的に取得する
2. Exchange環境とPOP/IMAP環境によるメールアドレス取得の違い(罠)を理解する
3. 取得したデータを新規メール作成などの業務自動化に組み込む

この3つのポイントさえ押さえておけば、Outlook VBAの基礎は完全にあなたのものです。
ここをクリアしたあなたなら、もっと複雑なフォルダ操作や、受信メールの自動仕分け処理などもスムーズに理解できるようになるはずですよ。

日々の面倒なメール作業はマクロに任せて、あなたにしかできないクリエイティブな仕事に時間を使いましょう。それでは、次のステップでお会いしましょう!

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