Power PlatformとAppSheetのアレコレ蓄積ブログ

Outlookアドレス帳のアドレス一覧を取得するマクロ

Outlook階層型アドレス帳や、Global Address Listについてはコピペでメールアドレス一覧を取得することは出来ません。

直感的に出来ないので諦めてしまっている方は多いと思いますが、Excelマクロを使用することで簡単に一覧を取得することが出来ます。

本記事では、マクロコード込みで詳細な手順を記載していきます。

出来るようになることOutlookからメールアドレスの一覧を取得出来る
必要レベルExcelマクロのVBE画面を表示出来る
動作確認環境Windows11/365 Apps for business(Outlook/Excel 2403)
いいね数

やりたいこと

最初に、やりたいことについて説明しておきます。

上記の「Offline Global Address List」の一覧を全て取得し、Excelに一覧を転記したい。というのがやりたいことです。

対象部署のみを指定したい場合は、Excelへ転記後にフィルター等で必要データのみを抽出してください。

マクロ付Excelファイルを使用する方はこちら

マクロ付Excelファイルをダウンロードして使用できる方はこちらをご参照ください。セキュリティ等で使用できない方は、「マクロ無Excelファイルを使用する方はこちら」をご参照ください。

Step.1 Outlookを立ち上げておく

特別な操作ではなく、いつも通りOutlookを起動させておいてください。

Step.2 テンプレートExcelをダウンロードする

今回は、こちらでも使用しているExcelを元にして使います。ダウンロードし、ファイルを開いてください。

Step.3 「アドレス帳一覧取得」ボタンをクリックする

開いたExcelファイルの「アドレス帳一覧取得」ボタンをクリックしてください。エラーが無ければ、一覧を取得できます。

マクロ無Excelファイルを使用する方はこちら

インターネット上からダウンロードしたExcelファイルでは、セキュリティによりマクロを動かせない場合があります。

マクロ無のExcelファイルをダウンロードし、マクロコードをVBEにコピペして実行する方法については、こちらをご参照ください。

Step.1 Outlookを立ち上げておく

特別な操作ではなく、いつも通りOutlookを起動させておいてください。

Step.2 テンプレートExcelをダウンロードする

今回は、こちらでも使用しているExcelを元にして使います。ダウンロードし、ファイルを開いてください。

Step.3 VBEにてマクロのコードをコピペする

以下のコードを新規で作成した標準モジュールにコピペしてください。

コピーしました!

VBA
Sub アドレス帳からアドレス一覧を取得する処理()
    Dim myNameSpace As Outlook.Namespace
    Dim myAddressList As Outlook.AddressList
    Dim myAddressEntries As Outlook.AddressEntries
    Dim myApplication As Outlook.Application: Set myApplication = Outlook.Application
    
    Set myNameSpace = myApplication.GetNamespace("MAPI")
    Set myAddressList = myNameSpace.AddressLists("Offline Global Address List")
    Set myAddressEntries = myAddressList.AddressEntries
    
    ' テーブルのデータ部のみを初期化する
    Dim ws As Worksheet: Set ws = ActiveSheet
    Dim tbl As ListObject: Set tbl = ws.ListObjects("テーブル1")
    If tbl.ListRows.Count <> 0 Then tbl.DataBodyRange.Delete xlUp
    
    ' ユーザー数分転記する
    Dim lastRow As Long, cntUser As Long
    Dim l As AddressEntry
    Dim oExUser As ExchangeUser
    For Each l In myAddressEntries
        Set oExUser = l.GetExchangeUser
        If Not oExUser Is Nothing Then
            ' テーブルの最下行を取得する
            Set tbl = ws.ListObjects("テーブル1")
            lastRow = tbl.ListRows.Count + 2
            ws.Cells(lastRow, 1) = oExUser.PrimarySmtpAddress      'メールアドレス
            ws.Cells(lastRow, 2) = oExUser.Name                    '氏名
            ws.Cells(lastRow, 3) = oExUser.CompanyName             '社名
            ws.Cells(lastRow, 4) = oExUser.Department              '部署
            ws.Cells(lastRow, 5) = oExUser.OfficeLocation          '事業所
            ws.Cells(lastRow, 6) = oExUser.JobTitle                '役職
            cntUser = cntUser + 1
        End If
    Next
    MsgBox "取得が完了しました" & vbCrLf & _
            "ユーザー数:" & cntUser, vbInformation
End Sub

Step.4 参照設定の[Microsoft Outlook xx.x Object Library]にチェックする

VBE画面にて、ツール⇒参照設定をクリックします。

[Microsoft Outlook xx.x Object Library]にチェックを入れ、OKをクリックします。

これで、Outlookのライブラリを追加することが出来ます。

Step.5 追加したマクロを実行する

F5キーもしくは、画面上の[実行]からマクロを実行してみてください。エラーが無ければ、一覧を取得できます。

まとめ

この作業を利用者側で出来ることにより、組織の管理者に一覧の送付をお願いする手間が省けます。

本記事が、見ていただいた方および、管理者の方の助けになれば幸いです。

本記事で参照させていただいたサイト様

いつも大変参考になる情報をありがとうございます。

この記事は参考になりましたか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA