【Excel VBA】Outlookの連絡先をエクセルシートで取得する

アイキャッチ

VBAは外部のライブラリを参照する事によって、そのアプリケーションには無い機能を利用することができます。今回はExcelでOutlook連絡先のアドレス帳データを取得するコードを紹介します。マクロ初心者の人にもわかるように全ての作業を図説しています。エクセルに連絡先を出力したい人は是非トライしてみてください。

出力するデータは個別に選択できます。紹介するサンプルはアドレス帳(宛先名やメールアドレス)を取得してエクセルシートに出力します。

目次

連絡先のアドレス帳を取得するマクロ

公式リファレンスにあるコードを参考にしています。変更点は以下の通りです。

  1. ハイパーリンクは不要なので削除
  2. 出力の条件分岐も不要なので削除
  3. シートの指定をシート名からオブジェクト名に変更
  4. フィールド名とフィールドの指定以外はコードを書き換えなくてもいいようにする
  5. データを配列に格納してまとめて出力する(処理時間短縮)
  6. アドレス帳と同じデータを出力する

4番目は、例えば出力するデータ項目を増やす場合、基コードの.Cells(1, 6).Value = “Email”Cells(lnContactCount, 6).Value = .Email1Addressをコピペしてフィールド名とプロパティ名を新たに指定、67に変更する、といった作業が必要になります。

この作業をまるっと無くすのが目的です。

アドレス帳取得コード

普段マクロを利用していない人は公式リファレンスを読んで全てのマクロを有効にするに変更してください。

6ステップで完了です。数分で完了します。

STEP
開発タブを表示する
オプションダイアログの画像。「開発」欄にチェックが入っている。

事前準備としてマクロの実行ができるように開発タブを表示して下さい。

ファイルオプションリボンのユーザー設定開発のチェックボックスをオンにします。(画像クリックで拡大)

STEP
VisualBasicEditorを起動する
Visual Basicの起動方法を説明する画像。詳細は以下。

開発タブでVisual BasicアイコンをクリックするとVBE(VisualBasicEditor)が表示されます。

ショートカットはAlt+F11です。

STEP
標準モジュールを挿入する
VBEで標準モジュールを挿入する方法を説明する画像。

VBEメニューの挿入から標準モジュールをクリックします。これでコードを貼り付ける準備は完了です。

STEP
シートのオブジェクト名を変更する
VBEの画像。Sheet1のオブジェクト名欄にwsアドレスが入力されている。

プロジェクトウィンドウ内のSheet1(Sheet1)をクリックし、下に現れるプロパティウインドウ内の(オブジェクト名)Sheet1からwsアドレスに変更してください。

最初にクリックした場所がwsアドレス(Sheet1)に変更されれば成功です。

STEP
VBAコードをコピペする
VBEの画像。標準モジュールにマクロ「アドレス帳インポート」がコピペされている。

プロジェクトウィンドウ内のModule1をダブルクリックし、下のコードをコピペして下さい。

コードのコピーはコード右上にコピーボタンがあります。

画像は皆さんの画面と色が違いますが気にしないで下さい

Public Sub アドレス帳インポート()
    Dim アウトルック As Object, 名前空間 As Object, フォルダ As Object, 連絡先 As Object, r As Object
    Dim フィールド名 As Variant, アドレス帳() As Variant
    Dim フィールド数 As Long, フィールド行 As Long, i As Long, k As Long

    Application.ScreenUpdating = False
    Set アウトルック = CreateObject("Outlook.Application")

    With wsアドレス 'ワークシートのオブジェクト名を変更して下さい
        .Range("A1").CurrentRegion.Clear
        フィールド名 = Array("名前", "表示名", "電子メールアドレス") '好きなフィールド名に書き換え
        For i = 0 To UBound(フィールド名)
            .Cells(1, i + 1).Value = フィールド名(i)
        Next i
        フィールド数 = UBound(フィールド名) + 1
        With .Range("A1").Resize(1, フィールド数)
            .Font.Bold = True
            .Font.ColorIndex = 10
            .Font.Size = 11
        End With

        Set 名前空間 = アウトルック.GetNamespace("MAPI")
        Set フォルダ = 名前空間.GetDefaultFolder(10)
        Set 連絡先 = フォルダ.Items

        フィールド行 = 0

        ReDim アドレス帳データ(フォルダ.Items.Count, フィールド数)

        For Each r In 連絡先
            With r
                アドレス帳 = Array(.Subject, .Email1DisplayName, .Email1Address) 'ContactItemプロパティ
            End With
            If TypeName(r) = "ContactItem" Then
                For k = 0 To UBound(アドレス帳)
                    アドレス帳データ(フィールド行, k) = アドレス帳(k)
                Next k
                フィールド行 = フィールド行 + 1
            End If
        Next r

        .Range("A2").Resize(フォルダ.Items.Count, フィールド数) = アドレス帳データ

        Set r = Nothing
        Set 連絡先 = Nothing
        Set フォルダ = Nothing
        Set 名前空間 = Nothing
        Set アウトルック = Nothing

        .Range("A2", .Cells(2, フィールド数).End(xlDown)).Sort key1:=.Range("A2"), order1:=xlAscending
        .Range(.Columns(1), .Columns(フィールド数)).EntireColumn.AutoFit
    End With
    Application.ScreenUpdating = True
    MsgBox "アドレス帳をインポートしました", vbInformation
End Sub
STEP
マクロを実行する
マクロ実行ダイアログの画像。マクロ「アドレス帳インポート」が選択されている。

開発タブでマクロアイコンをクリックし、ダイアログ内のアドレス帳インポートを実行すれば完了です。

マクロのショートカットはAlt+F8です。

このコードはアドレス帳と同じフィールドを出力します。出力するフィールドを変更したい場合は以下の箇所を変更してください。

  • フィールド名…11行目の” “内(デフォルトは名前,表示名,電子メールアドレス
  • フィールドのプロパティ名32行目(デフォルトは.Subject, .Email1DisplayName, .Email1Address

32行目のContactItemプロパティ名は記事の最後に一覧表を作成しているのでそこから探してください。

既知の不具合

フィールド名数 < フィールド数だとエラーが出ます。フィールド名数とフィールド数は合わせて下さい。アドレス帳が空の場合もエラーが出ます。アドレス帳に1件以上データがある状態でマクロを実行して下さい。

ContactItemオブジェクトのプロパティ名一覧

出力するフィールドを変更したい場合、一覧から目的のプロパティ名を探してください。フィールド名は任意ですが、プロパティ名は間違えるとエラーが出ます。

連絡先でよく使うフィールドとそのプロパティ名

名前関連

フィールド名プロパティ名
LastName
FirstName
勤務先CompanyName
フリガナ(姓)YomiLastName
フリガナ(名)YomiFirstName
フリガナ(勤務先名)YomiCompanyName
部署Department
役職JobTitle
表題FileAs

インターネット

フィールド名プロパティ名
メールEmail1Address
電子メール 表示名Email1DisplayName
WebページWebPage
IMアドレスIMAddress

電話

フィールド名プロパティ名
秘書の電話AssistantTelephoneNumber
勤務先電話BusinessTelephoneNumber
勤務先電話2Business2TelephoneNumber
勤務先 FAXBusinessFaxNumber
コールバックCallbackTelephoneNumber
自動車電話CarTelephoneNumber
勤務先代表電話CompanyMainTelephoneNumber
自宅電話HomeTelephoneNumber
自宅電話 2Home2TelephoneNumber
自宅 FAXHomeFaxNumber
ISDNISDNNumber
携帯電話MobileTelephoneNumber
その他の FAXOtherFaxNumber
その他の電話OtherTelephoneNumber
ポケットベルPagerNumber
通常の電話PrimaryTelephoneNumber
無線電話RadioTelephoneNumber
テレックスTelexNumber
TTY/TDDTTYTDDTelephoneNumber

住所

フィールド名プロパティ名
郵便番号(勤務先)BusinessAddressPostalCode
都道府県(勤務先)BusinessAddressState
市区町村(勤務先)BusinessAddressCity
番地(勤務先)BusinessAddressStreet
国/地域(勤務先)BusinessAddressCountry
郵便番号(自宅)HomeAddressPostalCode
都道府県(自宅)HomeAddressState
市区町村(自宅)HomeAddressCity
番地(自宅)HomeAddressStreet
国/地域(自宅)HomeAddressCountry
郵便番号(その他)OtherAddressPostalCode
都道府県(その他)OtherAddressState
市区町村(その他)OtherAddressCity
番地(その他)OtherAddressStreet
国/地域(その他)OtherAddressCountry
郵便番号(郵送先)MailingAddressPostalCode
都道府県(郵送先)MailingAddressState
市区町村(郵送先)MailingAddressCity
番地(郵送先)MailingAddressStreet
国/地域(郵送先)MailingAddressCountry

その他

フィールド名プロパティ名
事業所OfficeLocation
職業Profession
上司ManagerName
秘書AssistantName
ニックネームNickName
敬称(Dr,Mrs)Title
敬称(殿,様)Suffix
配偶者/パートナーSpouse
誕生日Birthday
記念日Anniversary

連結して値を返すプロパティ名

各フィールドを連結して値を返すプロパティもいくつか存在します。連絡先の表題に用意されているパターンもこれらのプロパティを使用しているのでしょう。

次のサンプルを例に表にしました。

煉獄(英字:Rengoku)

杏寿郎(英字:Kyoujyurou)

勤務先

鬼殺隊(英字:Demon Slayer)

敬称

殿(英字:Dr.)

名前関連

連結するフィールド名プロパティ名サンプルの表示結果
姓,名LastFirstNoSpace煉獄杏寿郎
姓 [ ] 名LastFirstSpaceOnly煉獄 杏寿郎
姓,名 [ ] 敬称LastFirstNoSpaceAndSuffix煉獄杏寿郎 殿
姓,名 [↓] 勤務先LastFirstNoSpaceCompany煉獄 杏寿郎
鬼殺隊
姓 [ ] 名 [↓] 勤務先LastFirstSpaceOnlyCompany煉獄 杏寿郎
鬼殺隊
勤務先 [↓] 姓,名CompanyLastFirstNoSpace鬼殺隊
煉獄杏寿郎
勤務先 [ ] 姓[↓]名CompanyLastFirstSpaceOnly鬼殺隊
煉獄 杏寿郎

英字の名前や英字の敬称(Dr,Mrs)を付与している場合、以下のプロパティを使用します。

連結するフィールド名プロパティ名サンプルの表示結果
英字敬称 [ ] 名 [ ] 姓 [ ]FullName ※Dr. Kyoujyurou Rengoku
姓 [ ] 名(英字)LastNameAndFirstNameRengoku, Kyoujyurou
姓 [ ] 名 [↓] 勤務先(英字)FullNameAndCompanyRengoku, Kyoujyurou
Demon Slayer
勤務先 [↓] 姓 [ ] 名(英字)CompanyAndFullNameDemon Slayer
Rengoku, Kyoujyurou

FullNameは日本語でも値を返します。英字の敬称(Dr,Mrs)を付与していなければ、結果は「 姓 [ ] 名 [ ] 敬称 」になるのでLastFirstNoSpaceAndSuffix「姓名 [ ] 敬称」とは空白1個分の違いがあります。

住所関連

住所のフィールドを連結するプロパティ もあります。

連結するフィールド名プロパティ名
勤務先:郵便番号 [↓] 都道府県,市区町村,番地BusinessAddress
自宅:           ↑HomeAddress
その他:          ↑OtherAddress
郵送先:          ↑MailingAddress

アドレス帳の[名前]

フィールド名プロパティ名
アドレス帳の[名前]と同じものSubject

アドレス帳の名前欄は、これまでに紹介したプロパティでは表示できません。仕様は「日本語だと姓,名,敬称、英字だと名,姓(敬称抜き)」みたいな感じです(多分)。紹介したコードもこのプロパティを使用しています。


Outlookを起動せずにPDFファイルをメール添付・送信するマクロも別記事で紹介しています。よかったらご覧下さい。

よかったらシェアしてね!
  • URLをコピーしました!
目次