【VBA】Outlookの連絡先をExcelシートへ一括出力する方法!87項目まとめ!

Outlookの連絡先一覧をExcelへ一括出力したいときはないでしょうか。

そんなときに悩むことは、

・Outlookの連絡先一覧をExcelへ一括出力したいが方法がわからない
・VBAを使いOutlookの連絡先一覧をExcelへ一括出力したいが方法がわからない
・出力したい連絡先の項目の指定方法がわからない

ですね。

今回はOutlookの連絡先を確認する際に便利な

・登録されている連絡先一覧をExcelへ出力する方法
・入力項目87個をまとめて出力するVBA

についてまとめます。

連絡先一覧をExcelへ出力するイメージ

今回のOutlook連絡先出力VBAの実装先は、出力結果を書き込む先のExcelブック側となります。

Excelブック側からスクリプトを実行し以下の流れで処理が行われます。

Excelブック(VBA) → 連絡先ちょうだい → Outlook
Excelブック ← 連絡先一覧を出すよ ← Outlook

Excel側のVBAを実行すると、

Outlookの連絡先情報が

さくっとExcelのシートへ出力されます!

標準機能で連絡先を出力する

Outlookから連絡先を出力する方法は標準機能でも可能です。
Outlook上にて以下の順序で操作をするとcsvファイル形式で出力することができます。

「ファイル」>「開く/エクスポート」>「インポート/エクスポート」>「ファイルにエクスポート」>「コンマ区切り値」>「連絡先」>出力先を選択>ファイル名を入力>処理の確認>「OK」

タカヒロ
タカヒロ
作業のステップが多く使うには少々面倒そうですよね…

そこで今回ご紹介する方法なら、

  Excel起動してマクロ実行

これだけです!

こちらのほうがカンタンですね!

Outlookもいちいち起動する必要もありません!

では早速実装をして動かしてみましょう!

Excel VBAからOutlookを操作するための下準備

まずExcel VBAからOutlookを操作するための下準備をしていきます。

①Excelを起動し、「開発」タブをクリックします。

②VBEの画面が開いたら、メニューから「ツール」>「参照設定」を選択します。

③「Microsoft Outlook XX.X Object Library」を探してチェックボックスにチェックし「OK」をクリックします。

以上です。

VBAを実装する

続いてVBAを実装します。

今回VBAは以下の通りとなります。
なお、VBAはこちらを参考にし、日本語化したり、出力項目を変えたり、少しカスタマイズを行いました。

Sub Outlookの連絡先をインポートする()

    'Outlook用の定義
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.Namespace
    Dim olFolder As Outlook.MAPIFolder
    Dim olConItems As Outlook.Items
    Dim olItem As Object
    
    'Excel用の定義
    Dim wbBook As Workbook
    Dim wsSheet As Worksheet
    
    Dim lnContactCount As Long
    
    Dim strDummy As String
    
    'スクリーンの更新は行われません。
    Application.ScreenUpdating = False
    
    'Excelのブックとワークシートのオブジェクトを設定します。
    Set wbBook = ThisWorkbook
    Set wsSheet = wbBook.Worksheets(1)
    
    '書き込み先のセルを指定します。また1行目にタイトルを記述します。
    With wsSheet
        .Range("A1").CurrentRegion.Clear
        .Cells(1, 1).Value = "CompanyName"
        .Cells(1, 2).Value = "Department"
        .Cells(1, 3).Value = "LastName"
        .Cells(1, 4).Value = "YomiLastName"
        .Cells(1, 5).Value = "FirstName"
        .Cells(1, 6).Value = "YomiFirstName"
        .Cells(1, 7).Value = "FullName"
        .Cells(1, 8).Value = "Email1Address"
        .Cells(1, 9).Value = "Email1DisplayName"
        .Cells(1, 10).Value = "MobileTelephoneNumber"

        With .Range("A1:Z1")
            .Font.Bold = True
            .Font.ColorIndex = 10
            .Font.Size = 11
        End With
    End With
    
    wsSheet.Activate
    
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの連絡先一覧を取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts)
    Set olConItems = olFolder.Items
            
    '取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。
    lnContactCount = 2
    
    For Each olItem In olConItems
        If TypeName(olItem) = "ContactItem" Then
            With olItem
                Cells(lnContactCount, 1).Value = .CompanyName
                Cells(lnContactCount, 2).Value = .Department
                Cells(lnContactCount, 3).Value = .LastName
                Cells(lnContactCount, 4).Value = .YomiLastName
                Cells(lnContactCount, 5).Value = .FirstName
                Cells(lnContactCount, 6).Value = .YomiFirstName
                Cells(lnContactCount, 7).Value = .FullName
                Cells(lnContactCount, 8).Value = .Email1Address
                Cells(lnContactCount, 9).Value = .Email1DisplayName
                Cells(lnContactCount, 10).Value = .MobileTelephoneNumber

            End With
            lnContactCount = lnContactCount + 1
        End If
    Next olItem
    
    'オブジェクトを解放します。
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
    
            
    'スクリーンの更新を有効にします。
    Application.ScreenUpdating = True
    
    MsgBox "Outlook連絡表の出力が完了しました!", vbInformation
    
End Sub

実装手順は以下の通りです。今回はExcel側にこのVBAを実装します。
①Excelを新規に開き、「開発」タブをクリックし、「VisualBasic」をクリックします。
もしくはショートカットキー「Alt」+「F11」でもOKです。

②標準モジュールを追加します。
左ペインのVBAProjectを右クリックし、「挿入」、「標準モジュール」を選択します。

③右ペインのウインドウに上記のマクロを入力します。

こちらで完了です。

VBAを実行する

①「開発」タブの「マクロ」をクリックし「Outlookの連絡先をインポートする」を選択し、「実行」をクリックします。

②「Outlook連絡表の出力が完了しました!」が表示されたら完成です!

確認をしてみましょう。

はい、Outlook連絡表の内容がExcelシートへ出力されていますね!

VBAについて説明

連絡先の項目はContactItemというメンバーに格納されています。
コードではolItemオブジェクトのタイプ名が”ContactItem”だった場合に処理を進めるようにしています。

If TypeName(olItem) = “ContactItem” Then

また連絡先の項目はプロパティに格納されており、今回は以下の項目に絞っています。

会社名:.CompanyName
部署名:.Department
姓:.LastName
姓フリガナ:.YomiLastName
名:.FirstName
名フリガナ:.YomiFirstName
姓名:.FullName
メールアドレス:.Email1Address
メールアドレス表示名:.Email1DisplayName
携帯番号:.MobileTelephoneNumber

連絡先のすべて項目は以下となっていますので、必要に応じて取捨選択頂ければと思います。
例えば11番目の列に「Email2Address」を追加する場合は、

Cells(lnContactCount, 11).Value = .Email2Address

のようにしてください。

【参考】ContactItem メンバー プロパティ一覧

名前 説明
Account 連絡先のアカウントを表す文字列を設定または返します。読み取り/書き込み。
Actions アイテムの使用可能なすべてのアクションを表すActionsコレクションを取得します。読み取り専用です。
Anniversary 連絡先の記念日を示す日付を設定または返します。読み取り/書き込み。
Application Outlook のアプリケーション オブジェクトの親を表すApplicationオブジェクトを返します。読み取り専用です。
AssistantName 連絡先の秘書の担当者の名前を表す文字列を設定または返します。読み取り/書き込み。
AssistantTelephoneNumber 連絡先の秘書の担当者の電話番号を表す文字列を設定または返します。読み取り/書き込み。
Attachments 添付ファイル を指定した項目のすべての添付ファイルを表すオブジェクトを返します。読み取り専用です。
AutoResolvedWinner ブール値アイテムが自動競合解決の勝者であるかどうかを返します。読み取り専用です。
BillingInformation Outlook アイテムに関連付けられている請求先情報を表す文字列を設定または返します。読み取り/書き込み。
Birthday 連絡先の誕生日を示す日付を設定または返します。読み取り/書き込み。
Body Outlook アイテムのクリア テキストの本文を表す文字列を設定または返します。読み取り/書き込み。
Business2TelephoneNumber 連絡先の 2 番目の会社の電話番号を表す文字列を設定または返します。読み取り/書き込み。
BusinessAddress 連絡先の会社の住所全体のアドレスを表す文字列を設定または返します。読み取り/書き込み。
BusinessAddressCity 連絡先の会社の住所の市町村部分を表す文字列を設定または返します。読み取り/書き込み。
BusinessAddressCountry 連絡先の会社の住所の国/地域コードの部分を表す文字列を設定または返します。読み取り/書き込み。
BusinessAddressPostalCode 連絡先の会社の住所の郵便番号 (zip コード) の部分を表す文字列を設定または返します。読み取り/書き込み。
BusinessAddressPostOfficeBox 連絡先の勤務先住所の私書箱部分を表す文字列を設定または返します。読み取り/書き込み。
BusinessAddressState 連絡先の勤務先住所の都道府県部分を表す文字列を設定または返します。読み取り/書き込み。
BusinessAddressStreet 連絡先の勤務先住所の番地部分を表す文字列を設定または返します。読み取り/書き込み。
BusinessCardLayoutXml 返すまたは、電子ビジネス カードの読み取り/書き込みのレイアウト用の XML マークアップを表す文字列を設定します。
BusinessCardType 連絡先に使用する電子名刺の種類を指定する定数 OlBusinessCardType を返します。値の取得のみ可能です。
BusinessFaxNumber 連絡先の会社の fax 番号を表す文字列を設定または返します。読み取り/書き込み。
BusinessHomePage 連絡先の勤務先の Web ページの URL を表す文字列を設定または返します。読み取り/書き込み。
BusinessTelephoneNumber 連絡先の最初の会社の電話番号を表す文字列を設定または返します。読み取り/書き込み。
CallbackTelephoneNumber 連絡先のコールバック電話番号を表す文字列を設定または返します。読み取り/書き込み。
CarTelephoneNumber 連絡先の自動車電話の番号を表す文字列を設定または返します。読み取り/書き込み。
Categories Outlook アイテムに割り当てられているカテゴリを表す文字列を設定または返します。読み取り/書き込み。
Children 連絡先の子供の名前を表す文字列を設定または返します。読み取り/書き込み。
Class オブジェクトのクラスを示す OlObjectClass 定数を取得します。値の取得のみ可能です。
Companies Outlook アイテムに関連付けられている会社の名前を表す文字列を設定または返します。読み取り/書き込み。
CompanyAndFullName 会社名と連絡先の完全名を表す文字列を返します。読み取り専用です。
CompanyLastFirstNoSpace 後に姓、名、およびスペースを入れずに、ミドル ネーム、姓と名の間で連絡先の会社名を表す文字列を返します。読み取り専用です。
CompanyLastFirstSpaceOnly 後に姓、名、およびスペースのミドル ネーム、姓、およびミドル ネームの間で連絡先の会社名を表す文字列を返します。読み取り専用です。
CompanyMainTelephoneNumber 連絡先の会社の主要な電話番号を表す文字列を設定または返します。読み取り/書き込み。
CompanyName 連絡先の会社名を表す文字列を設定または返します。読み取り/書き込み。
ComputerNetworkName 連絡先のコンピューター ネットワークの名前を表す文字列を設定または返します。読み取り/書き込み。
Conflicts 任意の Outlook アイテム オブジェクトの競合に含まれる項目を表す競合オブジェクトを返します。 読み取り専用です。
ConversationID ContactItem オブジェクトが属している会話のオブジェクトを一意に識別する文字列を返します。読み取り専用です。
ConversationIndex テーマ スレッド内の項目の相対位置を示す文字列を返します。読み取り専用です。
ConversationTopic Outlook アイテムのテーマ スレッドのトピックを表す文字列を返します。読み取り専用です。
CreationTime Outlook アイテムの作成日時を示す日付を返します。読み取り専用です。
CustomerID 連絡先のカスタマー ID を表す文字列を設定または返します。読み取り/書き込み。
Department 取引先担当者の部署名を表す文字列を設定または返します。読み取り/書き込み。
DownloadState アイテムのダウンロードの状態を示すOlDownloadState列挙に属している定数を返します。読み取り専用です。
Email1Address 連絡先の最初の電子メール アドレスの電子メール アドレスを表す文字列を設定または返します。読み取り/書き込み。
Email1AddressType アドレスの種類を表す文字列を設定 (電子メールまたは SMTP) の連絡先の最初の電子メール アドレスの。 読み取り/書き込み。
Email1DisplayName 連絡先の最初の電子メール アドレスの表示名を表す文字列を返します。読み取り/書き込み。
Email1EntryID 連絡先の最初の電子メール アドレスのエントリ ID を表す文字列を返します。読み取り専用です。
Email2Address 連絡先の 2 番目の電子メール アドレスの電子メール アドレスを表す文字列を設定または返します。読み取り/書き込み。
Email2AddressType アドレスの種類を表す文字列を設定 (電子メールまたは SMTP) の連絡先の 2 番目の電子メール アドレスの。読み取り/書き込み。
Email2DisplayName 連絡先の 2 番目の電子メール アドレスの表示名を表す文字列を返します。読み取り/書き込み。
Email2EntryID 連絡先の 2 番目の電子メール アドレスのエントリ ID を表す文字列を返します。読み取り専用です。
Email3Address 連絡先の 3 番目の電子メール アドレスの電子メール アドレスを表す文字列を設定または返します。読み取り/書き込み。
Email3AddressType アドレスの種類を表す文字列を設定 (電子メールまたは SMTP) の連絡先の 3 番目の電子メール アドレスの。読み取り/書き込み。
Email3DisplayName 連絡先の 3 番目の電子メール アドレスの表示名を表す文字列を返します。 読み取り/書き込み。
Email3EntryID 連絡先の 3 番目の電子メール アドレスのエントリ ID を表す文字列を返します。読み取り専用です。
EntryID オブジェクトの一意のエントリ ID を表す文字列型 (String) の値を取得します。値の取得のみ可能です。
FileAs 保存時に、取引先担当者に割り当てられている既定のキーワード文字列を示す文字列を設定または返します。読み取り/書き込み。
FirstName 連絡先の名を表す文字列を設定または返します。読み取り/書き込み。
FormDescription 指定された Outlook アイテムのフォームの説明を表すFormDescriptionオブジェクトを返します。読み取り専用です。
FTPSite 連絡先の FTP サイト エントリを表す文字列を設定または返します。読み取り/書き込み。
FullName 連絡先の氏名全体を区切らずにそのままを指定する文字列を設定または返します。読み取り/書き込み。
FullNameAndCompany 氏名 と会社名のプロパティの値を連結することにより、完全な名前と連絡先の会社を表す文字列を返します。読み取り専用です。
Gender 連絡先の性別を示します。OlGender クラスの定数を使用します。値の取得および設定が可能です。
GetInspector 指定した項目を含むインスペクターを表すInspectorオブジェクトを取得します。読み取り専用です。
GovernmentIDNumber 連絡先の ID 番号を表す文字列を設定または返します。読み取り/書き込み。
HasPicture 連絡先アイテムに関連付けられている画像がある場合は、 true を指定するブール値を返します。読み取り専用
Hobby 連絡先の趣味を表す文字列を設定または返します。読み取り/書き込み。
Home2TelephoneNumber 連絡先の 2 つ目の自宅の電話番号を表す文字列を設定または返します。読み取り/書き込み。
HomeAddress 連絡先の自宅の住所全体を区切らずにそのままのテキストを表す文字列を設定または返します。読み取り/書き込み。
HomeAddressCity 連絡先の自宅の住所の市町村部分を表す文字列を設定または返します。読み取り/書き込み。
HomeAddressCountry 連絡先の自宅の住所の国/地域の部分を表す文字列を設定または返します。読み取り/書き込み。
HomeAddressPostalCode 連絡先の自宅の住所の郵便番号部分を表す文字列を設定または返します。読み取り/書き込み。
HomeAddressPostOfficeBox 取得または連絡先の自宅の住所の私書箱部分文字列を設定します。読み取り/書き込み。
HomeAddressState 連絡先の自宅の住所の都道府県部分を表す文字列を設定または返します。読み取り/書き込み。
HomeAddressStreet 連絡先の自宅の住所の番地部分を表す文字列を設定または返します。読み取り/書き込み。
HomeFaxNumber 連絡先の自宅のファックス番号を表す文字列を設定または返します。読み取り/書き込み。
HomeTelephoneNumber 連絡先の最初の自宅の電話番号を表す文字列を設定または返します。読み取り/書き込み。
IMAddress 返すまたは、連絡先のマイクロソフトのインスタント メッセンジャーのアドレスを表す文字列を設定します。読み取り/書き込み。
Importance OlImportance を Outlook アイテムの相対的な重要度レベルを示す、定数を設定または返します。読み取り/書き込み。
Initials 連絡先のイニシャルを表す文字列を設定または返します。読み取り/書き込み。
InternetFreeBusyAddress 連絡先の [詳細] タブで [アドレス] ボックスに対応する文字列を設定または返します。 読み取り/書き込み。
IsConflict ブール値項目が競合しているかを決定する値を返します。読み取り専用です。
ISDNNumber 連絡先の ISDN 番号を表す文字列を設定または返します。読み取り/書き込み。
IsMarkedAsTask ContactItem を仕事としてマークするかどうかを示すブール値を返します。読み取り専用です。
ItemProperties Outlook アイテムに関連付けられているすべての標準およびユーザー定義のプロパティを表す名前のコレクションを返します。読み取り専用です。
JobTitle 連絡先の役職を表す文字列を設定または返します。読み取り/書き込み。
Journal ブール値 true を設定する場合は、連絡先のトランザクションが仕訳入力を返します。読み取り/書き込み。
Language 返すまたは、連絡先がメッセージを書き込む先の言語を表す文字列を設定します。読み取り/書き込み。
LastFirstAndSuffix 最後の名、名、ミドル ネーム、および連絡先の敬称を表す文字列を返します。読み取り専用です。
LastFirstNoSpace 姓、名、姓と名の間にスペースを連絡先のミドル ネームを表す文字列を返します。読み取り専用です。
LastFirstNoSpaceAndSuffix 姓、名、およびスペースを含まないユーザーのサフィックスを含む文字列を返します。読み取り専用
LastFirstNoSpaceCompany 姓、名、姓と名の間にスペースを連絡先のミドル ネームを表す文字列を返します。読み取り専用です。
LastFirstSpaceOnly 姓、名、およびそれらの間のスペースを含む連絡先のミドル ネームを表す文字列を返します。読み取り専用です。
LastFirstSpaceOnlyCompany 姓、名、およびそれらの間のスペースを含む連絡先のミドル ネームを表す文字列を返します。読み取り専用です。
LastModificationTime Outlook アイテムが最後に変更されたときの日時を指定する日付の値を返します。 読み取り専用です。
LastName 連絡先の姓を表す文字列を設定または返します。読み取り/書き込み。
LastNameAndFirstName 連絡先の最初の名前と姓を表す文字列を返します。読み取り専用です。
MailingAddress 全体を区切らずにそのまま郵送先住所、連絡先を表す文字列を設定または返します。読み取り/書き込み。
MailingAddressCity 連絡先の郵送先住所の市町村部分を表す文字列を設定または返します。読み取り/書き込み。
MailingAddressCountry 連絡先の郵送先住所の国/地域コードの部分を表す文字列を設定または返します。読み取り/書き込み。
MailingAddressPostalCode 連絡先の郵送先住所の郵便番号 (zip コード) の部分を表す文字列を設定または返します。読み取り/書き込み。
MailingAddressPostOfficeBox 連絡先の郵送先住所の私書箱部分を表す文字列を設定または返します。読み取り/書き込み。
MailingAddressState 連絡先の郵送先住所の都道府県部分を表す文字列を設定または返します。読み取り/書き込み。
MailingAddressStreet 連絡先の郵送先住所の番地部分を表す文字列を設定または返します。読み取り/書き込み。
ManagerName 連絡先のマネージャー名を表す文字列を設定または返します。読み取り/書き込み。
MarkForDownload リモート ユーザーがそれを受信した後、アイテムのステータスを決定するOlRemoteStatusの定数を設定または返します。読み取り/書き込み。
MessageClass Outlook アイテムのメッセージ クラスを表す文字列を設定または返します。読み取り/書き込み。
MiddleName 連絡先のミドル ネームを表す文字列を設定または返します。読み取り/書き込み。
Mileage アイテムの経費情報を表す文字列を設定または返します。読み取り/書き込み。
MobileTelephoneNumber 連絡先の携帯電話の番号を表す文字列を設定または返します。読み取り/書き込み。
NetMeetingAlias ユーザーの Microsoft NetMeeting ID またはエイリアスを示す文字列を設定または返します。読み取り/書き込み。
NetMeetingServer オンライン会議に使用されている Microsoft NetMeeting サーバーの名前を指定する文字列を設定または返します。読み取り/書き込み。
NickName 連絡先のニックネームを表す文字列を設定または返します。読み取り/書き込み。
NoAging 取得または Outlook のアイテムがない時代にTrueとなるブール値を設定します。読み取り/書き込み。
OfficeLocation 連絡先の特定のオフィスの場所 (たとえば、地またはスイート 123) を指定する文字列を設定または返します。読み取り/書き込み。
OrganizationalIDNumber 連絡先の組織の ID 番号を表す文字列を設定または返します。読み取り/書き込み。
OtherAddress 連絡先の他のアドレスを表す文字列を設定または返します。読み取り/書き込み。
OtherAddressCity 連絡先の他の住所の市町村部分を表す文字列を設定または返します。読み取り/書き込み。
OtherAddressCountry 連絡先の他の住所の国/地域の部分を表す文字列を設定または返します。読み取り/書き込み。
OtherAddressPostalCode 連絡先の他の住所の郵便番号部分を表す文字列を設定または返します。読み取り/書き込み。
OtherAddressPostOfficeBox 連絡先の他の住所の私書箱部分を表す文字列を設定または返します。読み取り/書き込み。
OtherAddressState 連絡先の他の住所の都道府県部分を表す文字列を設定または返します。読み取り/書き込み。
OtherAddressStreet 連絡先の他の住所の番地の部分を表す文字列を設定または返します。読み取り/書き込み。
OtherFaxNumber 連絡先の他の fax 番号を表す文字列を設定または返します。読み取り/書き込み。
OtherTelephoneNumber 連絡先の他の電話番号を表す文字列を設定または返します。読み取り/書き込み。
OutlookInternalVersion 長いOutlook アイテムを Outlook アプリケーションのビルド番号を表す値を返します。読み取り専用です。
OutlookVersion Outlook アイテム用の Outlook アプリケーションのメジャー バージョンとマイナー バージョン番号を示す文字列を返します。読み取り専用です。
PagerNumber 連絡先のポケットベルの番号を表す文字列を設定または返します。読み取り/書き込み。
Parent 指定されたオブジェクトの親 Object を取得します。値の取得のみ可能です。
PersonalHomePage 連絡先の個人用 Web ページの URL を表す文字列を設定または返します。読み取り/書き込み。
PrimaryTelephoneNumber 連絡先の主な電話番号を指定する文字列を設定または返します。読み取り/書き込み。
Profession 連絡先の職業を示す文字列を設定または返します。読み取り/書き込み。
PropertyAccessor 作成、取得、設定、および親ContactItemオブジェクトのプロパティを削除するをサポートするPropertyAccessorオブジェクトを返します。読み取り専用です。
RadioTelephoneNumber 連絡先の無線電話の番号を示す文字列を設定または返します。読み取り/書き込み。
ReferredBy 連絡先の参照名エントリを指定する文字列を設定または返します。読み取り/書き込み。
ReminderOverrideDefault 返すまたは、アラームは、アイテムの既定のアラーム設定をオーバーライドする場合にTrueとなるブール値を設定します。読み取り/書き込み。
ReminderPlaySound 取得または設定の場合は、アラームはこの項目の発生時にサウンドを再生する必要がありますが、 Trueとなるブール値です。読み取り/書き込み。
ReminderSet 返すまたは、このアイテムのアラームが設定されている場合は、 true を指定するブール値を設定します。読み取り/書き込み。
ReminderSoundFile Outlook アイテムのアラームが発生したときに再生するサウンド ファイルのパスとファイル名を示す文字列を設定または返します。読み取り/書き込み。
ReminderTime 指定したアイテムについてアラームが発生する日時を示す日付を設定または返します。読み取り/書き込み。
RTFBody 設定の本体を表すバイト配列を取得または設定しますMicrosoft Outlookリッチ テキスト形式の項目です。読み取り/書き込み。
Saved Outlook アイテムが最後の保存以降変更されていない場合は、 true を指定するブール値を返します。読み取り専用です。
SelectedMailingAddress 連絡先の郵送先住所の種類を示す OlMailingAddress クラスの定数を設定します。値の取得および設定が可能です。
Sensitivity Outlook アイテムの秘密度を示すOlSensitivity列挙の定数を設定または返します。読み取り/書き込み。
Session 現在のセッションの名前空間のオブジェクトを返します。読み取り専用です。
Size 長(バイト) のサイズ、Outlook アイテムを示す値を返します。読み取り専用です。
Spouse 名前のエントリを連絡先の配偶者またはパートナーを示す文字列を設定または返します。読み取り/書き込み。
Subject Outlook アイテムの件名を示す文字列を設定または返します。読み取り/書き込み。
Suffix 指定した連絡先の名前のサフィックス (jr.、III、博士など) を示す文字列を設定または返します。読み取り/書き込み。
TaskCompletedDate このContactItemの仕事の終了日を表す日付値を設定を取得または取得します。読み取り/書き込み。
TaskDueDate このContactItemの仕事の期限を表す日付値を設定を取得または取得します。読み取り/書き込み。
TaskStartDate このContactItemオブジェクトのタスクの開始日を表す日付値を設定を取得または取得します。読み取り/書き込み。
TaskSubject ContactItem オブジェクトの仕事の件名を表す文字列値に設定を取得または取得します。読み取り/書き込み。
TelexNumber 連絡先のテレックス番号を示す文字列を設定または返します。読み取り/書き込み。
Title 連絡先の肩書きを示す文字列を設定または返します。読み取り/書き込み。
ToDoTaskOrdinal ContactItem の仕事の序数を表す日付値を設定を取得または取得します。読み取り/書き込み。
TTYTDDTelephoneNumber 連絡先の TTY/TDD 電話番号を指定する文字列を設定または返します。読み取り/書き込み。
UnRead 返すまたは、アイテムがされていません。 Outlook には、(読み取り) が開かれている場合は、 true を指定するブール値を設定します。読み取り/書き込み。
User1 多目的連絡先の連絡先フォームの最初のフィールドを指定する文字列を設定または返します。読み取り/書き込み。
User2 多目的連絡先の連絡先フォームの 2 番目のフィールドを指定する文字列を設定または返します。読み取り/書き込み。
User3 多目的連絡先の連絡先フォームの 3 番目のフィールドを指定する文字列を設定または返します。読み取り/書き込み。
User4 多目的連絡先の連絡先フォームの 4 番目のフィールドを指定する文字列を設定または返します。読み取り/書き込み。
UserProperties Outlook アイテムのすべてのユーザー プロパティを[ユーザー プロパティ]コレクションを返します。読み取り専用です。
WebPage 連絡先の Web ページの URL を示す文字列を設定または返します。読み取り/書き込み。
YomiCompanyName 連絡先の会社名のふりがな (型) を示す文字列を設定または返します。読み取り/書き込み。
YomiFirstName ふりがな (型) の最初の連絡先の名前を示す文字列を設定または返します。読み取り/書き込み。
YomiLastName 連絡先の姓のふりがな (型) を示す文字列を設定または返します。読み取り/書き込み。

<追加>連絡先の「全般」と「詳細」に入力した87項目の情報をまとめて出力する

次に、連絡先の「全般」と「詳細」に入力した87項目の情報をまとめて出力するようにしていきます。

「全般」

「詳細」

タカヒロ
タカヒロ
項目数が多いので、必要に応じて絞り込んでいただければと思います。

サンプルコードは以下の通りです。

Sub Outlookの連絡先を取得する_項目追加版()

    'Outlook用の定義
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.Namespace
    Dim olFolder As Outlook.MAPIFolder
    Dim olConItems As Outlook.Items
    Dim olItem As Object
    
    'Excel用の定義
    Dim wbBook As Workbook
    Dim wsSheet As Worksheet
    
    Dim lnContactCount As Long
    
    Dim strDummy As String
    
    'スクリーンの更新は行われません。
    Application.ScreenUpdating = False
    
    'Excelのブックとワークシートのオブジェクトを設定します。
    Set wbBook = ThisWorkbook
    Set wsSheet = wbBook.Worksheets(1)
    
    '書き込み先のセルを指定します。また1行目にタイトルを記述します。
    With wsSheet
    
        '「全般」の項目名をセットします。
        .Cells(1, 1).Value = "Body"
        .Cells(1, 2).Value = "BusinessAddress"
        .Cells(1, 3).Value = "BusinessAddressCity"
        .Cells(1, 4).Value = "BusinessAddressCountry"
        .Cells(1, 5).Value = "BusinessAddressPostalCode"
        .Cells(1, 6).Value = "BusinessAddressState"
        .Cells(1, 7).Value = "BusinessAddressStreet"
        .Cells(1, 8).Value = "BusinessFaxNumber"
        .Cells(1, 9).Value = "BusinessHomePage"
        .Cells(1, 10).Value = "BusinessTelephoneNumber"
        .Cells(1, 11).Value = "CompanyAndFullName"
        .Cells(1, 12).Value = "CompanyName"
        .Cells(1, 13).Value = "ConversationTopic"
        .Cells(1, 14).Value = "CreationTime"
        .Cells(1, 15).Value = "Department"
        .Cells(1, 16).Value = "Email1Address"
        .Cells(1, 17).Value = "Email1AddressType"
        .Cells(1, 18).Value = "Email1DisplayName"
        .Cells(1, 19).Value = "Email1EntryID"
        .Cells(1, 20).Value = "Email2Address"
        .Cells(1, 21).Value = "Email2AddressType"
        .Cells(1, 22).Value = "Email2DisplayName"
        .Cells(1, 23).Value = "Email2EntryID"
        .Cells(1, 24).Value = "Email3Address"
        .Cells(1, 25).Value = "Email3AddressType"
        .Cells(1, 26).Value = "Email3DisplayName"
        .Cells(1, 27).Value = "Email3EntryID"
        .Cells(1, 28).Value = "EntryID"
        .Cells(1, 29).Value = "FileAs"
        .Cells(1, 30).Value = "FirstName"
        .Cells(1, 31).Value = "FullNameAndCompany"
        .Cells(1, 32).Value = "GetInspector"
        .Cells(1, 33).Value = "HasPicture"
        .Cells(1, 34).Value = "Hobby"
        .Cells(1, 35).Value = "Home2TelephoneNumber"
        .Cells(1, 36).Value = "HomeAddress"
        .Cells(1, 37).Value = "HomeAddressCity"
        .Cells(1, 38).Value = "HomeAddressCountry"
        .Cells(1, 39).Value = "HomeAddressPostalCode"
        .Cells(1, 40).Value = "HomeAddressPostOfficeBox"
        .Cells(1, 41).Value = "HomeAddressState"
        .Cells(1, 42).Value = "HomeAddressStreet"
        .Cells(1, 43).Value = "HomeFaxNumber"
        .Cells(1, 44).Value = "HomeTelephoneNumber"
        .Cells(1, 45).Value = "IMAddress"
        .Cells(1, 46).Value = "JobTitle"
        .Cells(1, 47).Value = "LastModificationTime"
        .Cells(1, 48).Value = "LastName"
        .Cells(1, 49).Value = "LastNameAndFirstName"
        .Cells(1, 50).Value = "MailingAddress"
        .Cells(1, 51).Value = "MailingAddressCity"
        .Cells(1, 52).Value = "MailingAddressCountry"
        .Cells(1, 53).Value = "MailingAddressPostalCode"
        .Cells(1, 54).Value = "MailingAddressState"
        .Cells(1, 55).Value = "MailingAddressStreet"
        .Cells(1, 56).Value = "MobileTelephoneNumber"
        .Cells(1, 57).Value = "NoAging"
        .Cells(1, 58).Value = "OrganizationalIDNumber"
        .Cells(1, 59).Value = "OtherAddress"
        .Cells(1, 60).Value = "OtherAddressCity"
        .Cells(1, 61).Value = "OtherAddressCountry"
        .Cells(1, 62).Value = "OtherAddressPostalCode"
        .Cells(1, 63).Value = "OtherAddressPostOfficeBox"
        .Cells(1, 64).Value = "OtherAddressState"
        .Cells(1, 65).Value = "OtherAddressStreet"
        .Cells(1, 66).Value = "OtherFaxNumber"
        .Cells(1, 67).Value = "OtherTelephoneNumber"
        .Cells(1, 68).Value = "Parent"
        .Cells(1, 69).Value = "PropertyAccessor"
        .Cells(1, 70).Value = "WebPage"
        .Cells(1, 71).Value = "YomiCompanyName"
        .Cells(1, 72).Value = "YomiFirstName"
        .Cells(1, 73).Value = "YomiLastName"
        
        '「詳細」の項目名をセットします。
        .Cells(1, 74).Value = "Anniversary"
        .Cells(1, 75).Value = "AssistantName"
        .Cells(1, 76).Value = "Birthday"
        .Cells(1, 77).Value = "FullName"
        .Cells(1, 78).Value = "InternetFreeBusyAddress"
        .Cells(1, 79).Value = "ManagerName"
        .Cells(1, 80).Value = "NickName"
        .Cells(1, 81).Value = "OfficeLocation"
        .Cells(1, 82).Value = "Profession"
        .Cells(1, 83).Value = "Spouse"
        .Cells(1, 84).Value = "Subject"
        .Cells(1, 85).Value = "Suffix"
        .Cells(1, 86).Value = "TaskSubject"
        .Cells(1, 87).Value = "Title"

        With .Range("A1:ZZ1")
            .Font.Bold = True
            .Font.ColorIndex = 10
            .Font.Size = 11
        End With
    End With
    
    wsSheet.Activate
    
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの連絡先一覧を取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts)
    Set olConItems = olFolder.Items
            
    '取得結果を記述する行番号を指定します。2行目のセルから開始されることになります。
    lnContactCount = 2
    
    For Each olItem In olConItems
        If TypeName(olItem) = "ContactItem" Then
            With olItem
            
                '「全般」の入力項目を出力します。
                Cells(lnContactCount, 1).Value = .Body
                Cells(lnContactCount, 2).Value = .BusinessAddress
                Cells(lnContactCount, 3).Value = .BusinessAddressCity
                Cells(lnContactCount, 4).Value = .BusinessAddressCountry
                Cells(lnContactCount, 5).Value = .BusinessAddressPostalCode
                Cells(lnContactCount, 6).Value = .BusinessAddressState
                Cells(lnContactCount, 7).Value = .BusinessAddressStreet
                Cells(lnContactCount, 8).Value = .BusinessFaxNumber
                Cells(lnContactCount, 9).Value = .BusinessHomePage
                Cells(lnContactCount, 10).Value = .BusinessTelephoneNumber
                Cells(lnContactCount, 11).Value = .CompanyAndFullName
                Cells(lnContactCount, 12).Value = .CompanyName
                Cells(lnContactCount, 13).Value = .ConversationTopic
                Cells(lnContactCount, 14).Value = .CreationTime
                Cells(lnContactCount, 15).Value = .Department
                Cells(lnContactCount, 16).Value = .Email1Address
                Cells(lnContactCount, 17).Value = .Email1AddressType
                Cells(lnContactCount, 18).Value = .Email1DisplayName
                Cells(lnContactCount, 19).Value = .Email1EntryID
                Cells(lnContactCount, 20).Value = .Email2Address
                Cells(lnContactCount, 21).Value = .Email2AddressType
                Cells(lnContactCount, 22).Value = .Email2DisplayName
                Cells(lnContactCount, 23).Value = .Email2EntryID
                Cells(lnContactCount, 24).Value = .Email3Address
                Cells(lnContactCount, 25).Value = .Email3AddressType
                Cells(lnContactCount, 26).Value = .Email3DisplayName
                Cells(lnContactCount, 27).Value = .Email3EntryID
                Cells(lnContactCount, 28).Value = .EntryID
                Cells(lnContactCount, 29).Value = .FileAs
                Cells(lnContactCount, 30).Value = .FirstName
                Cells(lnContactCount, 31).Value = .FullNameAndCompany
                Cells(lnContactCount, 32).Value = .GetInspector
                Cells(lnContactCount, 33).Value = .HasPicture
                Cells(lnContactCount, 34).Value = .Hobby
                Cells(lnContactCount, 35).Value = .Home2TelephoneNumber
                Cells(lnContactCount, 36).Value = .HomeAddress
                Cells(lnContactCount, 37).Value = .HomeAddressCity
                Cells(lnContactCount, 38).Value = .HomeAddressCountry
                Cells(lnContactCount, 39).Value = .HomeAddressPostalCode
                Cells(lnContactCount, 40).Value = .HomeAddressPostOfficeBox
                Cells(lnContactCount, 41).Value = .HomeAddressState
                Cells(lnContactCount, 42).Value = .HomeAddressStreet
                Cells(lnContactCount, 43).Value = .HomeFaxNumber
                Cells(lnContactCount, 44).Value = .HomeTelephoneNumber
                Cells(lnContactCount, 45).Value = .IMAddress
                Cells(lnContactCount, 46).Value = .JobTitle
                Cells(lnContactCount, 47).Value = .LastModificationTime
                Cells(lnContactCount, 48).Value = .LastName
                Cells(lnContactCount, 49).Value = .LastNameAndFirstName
                Cells(lnContactCount, 50).Value = .MailingAddress
                Cells(lnContactCount, 51).Value = .MailingAddressCity
                Cells(lnContactCount, 52).Value = .MailingAddressCountry
                Cells(lnContactCount, 53).Value = .MailingAddressPostalCode
                Cells(lnContactCount, 54).Value = .MailingAddressState
                Cells(lnContactCount, 55).Value = .MailingAddressStreet
                Cells(lnContactCount, 56).Value = .MobileTelephoneNumber
                Cells(lnContactCount, 57).Value = .NoAging
                Cells(lnContactCount, 58).Value = .OrganizationalIDNumber
                Cells(lnContactCount, 59).Value = .OtherAddress
                Cells(lnContactCount, 60).Value = .OtherAddressCity
                Cells(lnContactCount, 61).Value = .OtherAddressCountry
                Cells(lnContactCount, 62).Value = .OtherAddressPostalCode
                Cells(lnContactCount, 63).Value = .OtherAddressPostOfficeBox
                Cells(lnContactCount, 64).Value = .OtherAddressState
                Cells(lnContactCount, 65).Value = .OtherAddressStreet
                Cells(lnContactCount, 66).Value = .OtherFaxNumber
                Cells(lnContactCount, 67).Value = .OtherTelephoneNumber
                Cells(lnContactCount, 68).Value = .Parent
                Cells(lnContactCount, 69).Value = .PropertyAccessor
                Cells(lnContactCount, 70).Value = .WebPage
                Cells(lnContactCount, 71).Value = .YomiCompanyName
                Cells(lnContactCount, 72).Value = .YomiFirstName
                Cells(lnContactCount, 73).Value = .YomiLastName

                '「詳細」の入力項目を出力します。
                Cells(lnContactCount, 74).Value = .Anniversary
                Cells(lnContactCount, 75).Value = .AssistantName
                Cells(lnContactCount, 76).Value = .Birthday
                Cells(lnContactCount, 77).Value = .FullName
                Cells(lnContactCount, 78).Value = .InternetFreeBusyAddress
                Cells(lnContactCount, 79).Value = .ManagerName
                Cells(lnContactCount, 80).Value = .NickName
                Cells(lnContactCount, 81).Value = .OfficeLocation
                Cells(lnContactCount, 82).Value = .Profession
                Cells(lnContactCount, 83).Value = .Spouse
                Cells(lnContactCount, 84).Value = .Subject
                Cells(lnContactCount, 85).Value = .Suffix
                Cells(lnContactCount, 86).Value = .TaskSubject
                Cells(lnContactCount, 87).Value = .Title

            End With
            lnContactCount = lnContactCount + 1
        End If
    Next olItem
    
    'オブジェクトを解放します。
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
    
    'スクリーンの更新を有効にします。
    Application.ScreenUpdating = True
    
    MsgBox "Outlook連絡先の取得が完了しました!", vbInformation
    
End Sub

VBAを実行してみましょう。

はい、全部取りができていますね!

「全般」

項目名 入力例 説明
Body 追加太郎のメモです。 メモ項目の本文
BusinessAddress 102-0072

東京都千代田区飯田橋**-1

連絡先の会社の住所全体のアドレス
BusinessAddressCity 千代田区飯田橋 連絡先の会社の住所の市町村部分
BusinessAddressCountry 日本 連絡先の会社の住所の国/地域コードの部分
BusinessAddressPostalCode 102-0072 連絡先の会社の住所の郵便番号 (zip コード) の部分
BusinessAddressState 東京都 連絡先の勤務先住所の都道府県部分
BusinessAddressStreet **-1 連絡先の勤務先住所の番地部分
BusinessFaxNumber 03-0000-0001 連絡先の会社の fax 番号
BusinessHomePage https://extan.jp/ 連絡先の勤務先の Web ページの URL
BusinessTelephoneNumber 03-0000-0000 連絡先の最初の会社の電話番号を表す
CompanyAndFullName 〇〇株式会社

追加, 太郎

会社名と連絡先の完全名
CompanyName 〇〇株式会社 連絡先の会社名
ConversationTopic 追加 Outlook アイテムのテーマ スレッドのトピック
CreationTime 44487.00306 Outlook アイテムの作成日時
Department 第一営業部 取引先担当者の部署名
Email1Address moto1@extan.jp 連絡先の最初の電子メール アドレスの電子メール アドレス
Email1AddressType SMTP アドレスの種類
Email1DisplayName 追加太郎のアドレス 連絡先の最初の電子メール アドレスの表示名
Email1EntryID 連絡先の最初の電子メール アドレスのエントリ ID
Email2Address 連絡先の 2 番目の電子メール アドレスの電子メール アドレス
Email2AddressType アドレスの種類
Email2DisplayName 連絡先の 2 番目の電子メール アドレスの表示名
Email2EntryID 連絡先の 2 番目の電子メール アドレスのエントリ ID
Email3Address 連絡先の 3 番目の電子メール アドレスの電子メール アドレス
Email3AddressType アドレスの種類
Email3DisplayName 連絡先の 3 番目の電子メール アドレスの表示名
Email3EntryID 連絡先の 3 番目の電子メール アドレスのエントリ ID
EntryID 000000003D614B2A38ADDF4F*** オブジェクトの一意のエントリ ID
FileAs 追加, 太郎 取引先担当者に割り当てられている既定のキーワード文字列を示す文字列
FirstName 太郎 連絡先の名
FullNameAndCompany 追加, 太郎

〇〇株式会社

名前と連絡先の会社
GetInspector 追加, 太郎 指定した項目を含むインスペクターを表すInspectorオブジェクト
HasPicture TRUE 画像がある場合はtrueを返す
Hobby 連絡先の趣味
Home2TelephoneNumber 連絡先の2つ目の自宅の電話番号
HomeAddress 192-0000

東京都八王子市**-2

連絡先の自宅の住所全体テキスト
HomeAddressCity 八王子市 連絡先の自宅の住所の市町村部分
HomeAddressCountry 日本 連絡先の自宅の住所の国/地域の部分
HomeAddressPostalCode 192-0000 連絡先の自宅の住所の郵便番号部分
HomeAddressPostOfficeBox 自宅の住所の私書箱部分文字列
HomeAddressState 東京都 自宅の住所の都道府県部分
HomeAddressStreet **-2 自宅の住所の番地部分
HomeFaxNumber 自宅のファックス番号
HomeTelephoneNumber 042-000-0000 最初の自宅の電話番号
IMAddress IM マイクロソフトのインスタント メッセンジャーのアドレス
JobTitle 次長 連絡先の役職
LastModificationTime 44498.45869 Outlook アイテムが最後に変更されたときの日時
LastName 追加 連絡先の姓
LastNameAndFirstName 追加, 太郎 連絡先の最初の名前と姓
MailingAddress 192-0000

東京都八王子市**-2

郵送先住所、連絡先
MailingAddressCity 八王子市 連絡先の郵送先住所の市町村部分
MailingAddressCountry 日本 連絡先の郵送先住所の国/地域コードの部分
MailingAddressPostalCode 192-0000 連絡先の郵送先住所の郵便番号 (zip コード) の部分
MailingAddressState 東京都 連絡先の郵送先住所の都道府県部分
MailingAddressStreet **-2 連絡先の郵送先住所の番地部分
MobileTelephoneNumber 080-000-0000 連絡先の携帯電話の番号
NoAging FALSE Outlook のアイテムがない時にTrue
OrganizationalIDNumber 連絡先の組織のID 番号
OtherAddress 連絡先の他のアドレス
OtherAddressCity 連絡先の他の住所の市町村部分
OtherAddressCountry 連絡先の他の住所の国/地域の部分
OtherAddressPostalCode 連絡先の他の住所の郵便番号部分
OtherAddressPostOfficeBox 連絡先の他の住所の私書箱部分
OtherAddressState 連絡先の他の住所の都道府県部分
OtherAddressStreet 連絡先の他の住所の番地の部分
OtherFaxNumber 連絡先の他の fax 番号
OtherTelephoneNumber 連絡先の他の電話番号
Parent 追加連絡先フォルダ 指定されたオブジェクトの親Object を取得
PropertyAccessor 追加, 太郎 作成、取得、設定、および親ContactItemオブジェクトのプロパティ
WebPage https://extan.jp/ 連絡先の Web ページの URL を示す文字列
YomiCompanyName マルマルカブシキガイシャ 連絡先の会社名のふりがな (型) を示す文字列
YomiFirstName タロウ ふりがな (型) の最初の連絡先の名前を示す文字列
YomiLastName ツイカ 連絡先の姓のふりがな (型) を示す文字列

「詳細」

項目名 入力例 説明
Anniversary 43728 連絡先の記念日を示す日付
AssistantName 〇〇秘書 連絡先の秘書の担当者の名前
Birthday 36795 連絡先の誕生日を示す日付
FullName Mr. 追加 太郎 殿 連絡先の氏名全体を区切らずにそのままを指定する文字列
InternetFreeBusyAddress http://空き時間情報アドレス 連絡先の [詳細] タブで [アドレス] ボックスに対応する文字列
ManagerName 〇〇部長 連絡先のマネージャー名
NickName ニックネーム 連絡先のニックネーム
OfficeLocation DX推進課 連絡先の特定のオフィスの場所 (たとえば、地またはスイート 123) を指定する文字列
Profession システム営業 連絡先の職業を示す文字列
Spouse 妻〇〇 名前のエントリを連絡先の配偶者またはパートナーを示す文字列
Subject 太郎 追加 殿 Outlook アイテムの件名を示す文字列
Suffix 殿 指定した連絡先の名前のサフィックス (jr.、III、博士など) を示す文字列
TaskSubject 太郎 追加 殿 ContactItem オブジェクトの仕事の件名
Title Mr. 連絡先の肩書きを示す文字列

<追加>連絡先へ追加したフォルダの連絡先情報を出力する

読者の方より連絡先へ追加したフォルダの連絡先情報を出力する方法はないか要望がありましたので、追記致します。

変更箇所は1か所のみです。

olNamespace.GetDefaultFolder(olFolderContacts)

.Folders(“<追加連絡先フォルダ名>”)

を追加します。

例えば連絡先のフォルダ名が「追加連絡先フォルダ」である場合は、

 Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts).Folders(“追加連絡先フォルダ”)

となります。

<追加>複数のフォルダの連絡先情報をまとめて出力する

読者の方より複数のフォルダの連絡先情報をまとめて出力する方法はないか要望がありましたので、追記致します。

タカヒロ
タカヒロ
例えば、連絡先ビューに
・追加フォルダ1
連絡先アイテム1-1
・追加フォルダ2
連絡先アイテム2-1
とあり、
・連絡先アイテム1-1
・連絡先アイテム2-1
を取得したい場合ですね。

ソースコードの以下の箇所を変更します。

■変更前

For Each olItem In olConItems
If TypeName(olItem) = “ContactItem” Then
With olItem
Cells(lnContactCount, 1).Value = .CompanyName


End With
lnContactCount = lnContactCount + 1
End If
Next olItem

■変更後

For Each olFolder In olNamespace.GetDefaultFolder(olFolderContacts).Folders
Set olConItems = olFolder.Items
For Each olItem In olConItems
If TypeName(olItem) = “ContactItem” Then
With olItem
Cells(lnContactCount, 1).Value = .CompanyName


End With
lnContactCount = lnContactCount + 1
End If
Next olItem
Next olFolder

For EachでFoldersコレクションの要素を繰り返し取得しています。

For Each olFolder In olNamespace.GetDefaultFolder(olFolderContacts).Folders

各フォルダ名も併せて出力したい場合は、

Cells(lnContactCount, 16).Value = olFolder.Name

を付け加えてください。
Cells16番目の列であるP列にフォルダ名が出力されます。

タカヒロ
タカヒロ
この方法はFoldersコレクションに含まれるデフォルトのフォルダも対象となり、
キャッシュ情報やデフォルトの連絡先アイテムなども出力されますので、
Excel側で不要なデータがあれば削除するようお願い致します。

さいごに

いかがでしょうか。

今回は

・登録されている連絡先一覧をExcelへ出力する方法
・入力項目87個をまとめて出力するVBA

についてまとめました。

普段よく使う連絡先だからこそ管理をカンタンにしてミスがないようにしたいですね。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








40 件のコメント

  • 昨年はありがとうございました。
    作成した連絡帳の抽出を運用しているのですが
    一点機能を追加したくご質問させていただきます。

    マクロ実行ボタンを作成し実行しているのですが、
    ボタンを押した際に、マクロに記載している特定のユーザーのみ実行でき、
    その他のユーザーは許可が無いみたいなメッセージボックスを出す、
    みたいな権限機能を追加したいのですが可能でしょうか。
    よろしくお願いいたします。

    • いつもご利用ありがとうございます。

      特定のユーザーのみマクロを実行できるかのご質問につきまして、
      簡易的ではありますが以下のような処理を追加すれば実現可能となります。
      許可リストの値は適宜変更頂ければと存じます。

      サンプルコード
      —–
      ‘許可リストとなる配列を作成します。「,」区切りでユーザ名を入力してください。
      arrUser = Array(“testUserA”, “testUserB”, “takahiro”)

      ‘現ログインユーザがリストに存在するか部分一致で検索します。
      arrResult = Filter(arrUser, Application.UserName)

      ‘検索結果の有無で、実行許可を判定します。
      If UBound(arrResult) > -1 Then
      Debug.Print arrResult(UBound(arrResult)) & “は許可されたユーザです。”

      ‘↓以下に処理を追記してください。↓

      Else
      ‘許可リストにないユーザだった場合はメッセージを表示させます。
      MsgBox “実行する権限がありません。権限付与を希望する場合は***まで申請をしてください。”, vbInformation
      End If

      —–

  • 色々とご教授いただき、ありがとうございました。
    結果から申しますと連絡先フォルダを右クリックしプロパティを選択、「全般」タブの「場所」が人によってバラバラのため、網羅することができませんでした。
    アドレスになっていたり、ローカルフォルダに設定されていたり…

    実行するとどこかしらのPCで「実行しようとした操作が失敗しました。オブジェクトが見つかりませんでした。」のエラーが出てしまいます。

    もし可能であれば、種類が「連絡先アイテム」になっているアドレス帳があれば
    すべて抜き出すようなVBAは可能でしょうか。
    もしそんな機能がなければ、一旦フォルダを作成して集約してもらうしかないかなと考えております…。
    すみませんが、よろしくお願いいたします。

    • 「連絡先アイテム」をすべて抜き出せるかのご質問につきまして、

      GetDefaultFolder(olFolderContacts)メソッドでは
      既定の連絡先フォルダ、サブフォルダを指定してからアイテムを抜き出す仕様となりますので、
      既定外のフォルダにある連絡先アイテムは対象から外れる形となります。

      ですので、ご認識の通り既定の連絡先フォルダ/サブフォルダ内に集約し、
      取得する形が望ましいと思われます。

      また、「場所」がアドレスのみの場合は「共有の連絡先」である可能性がありますので、
      そのアドレスが参加しているドメインであり、かつ参照権限がある場合はGetSharedDefaultFolderメソッドを使用して
      取得いただければと存じます。

      ご検討の程お願いいたします。

  • ご連絡ありがとうございます。
    いよいよ頭がパニックになってまいりました…
    早速連絡先の場所を調べたのですが、私の連絡先の場所は「\\Outlookデータフォルダ」となっており、別の方は「\\abcd.efg@xxx.co.jp」とアドレスになっていたりと
    様々な状態でした。
    ただ、どのPCであっても
    For Each olItem In olConItems
    If TypeName(olItem) = “ContactItem” Then
    With olItem
    で処理をすると、デフォルトの連絡先だけは出力できるようでした。
    For Each olFolder In olNamespace.GetDefaultFolder(olFolderContacts).Folders
    を足すとフォルダを見に行かないようです。

    教えていただいた「\\\連絡先\フォルダ」の構成になっていないのが原因でしょうか。

    色々すみませんが、よろしくお願いいたします。

    • ご連絡ありがとうございます。

      「\\<アドレス>」のみの構成となっている場合は追加フォルダではなく、他アドレスから共有されている連絡先である可能性があります。
      その場合にはGetDefaultFolderメソッドでは取得できかねますこと、ご了承のほどお願いいたします。

      もし他アドレスから共有されている連絡先一覧を取得をされる場合は、GetSharedDefaultFolderメソッドで対応が可能ですので、試していただければと存じます。

      ■変更前
      Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts)

      ■変更後
      Set recOther = olNamespace.CreateRecipient(“<アドレスを指定>”)
      Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts)

  • 分かり易い回答ありがとうございました。
    今色々試しているのですが、何度やっても
    For Each olFolder In olNamespace.GetDefaultFolder(olFolderContacts).Foldersの処理を実行した後次のSet olConItems = olFolder.Items処理に進まず全てを飛ばし
    Next olItem下の
    ‘Null out the variables.
    Set olItem = Nothing
    まで飛んでしまいます。
    自分のPCの問題かと思い別の利用者PCでも試したのですが同じ結果となりました。
    フォルダが見つからなかった場合の動きのようにも見えるのですが、フォルダは作成しております。
    連絡先フォルダの作り方の問題でしょうか。
    すみませんが、よろしくお願いいたします。

    • ご認識の通りフォルダを見つけることが出来ていない可能性がありますので、

      連絡先フォルダを右クリックしプロパティを選択、「全般」タブの「場所」が
      \\<アドレス>\連絡先\<フォルダ名>
      になっているかご確認頂けますでしょうか。

      「連絡先」直下にあるフォルダが取得対象となりますので、作成されたフォルダの場所が2階層目以降であったり、「連絡先」以外の場所であれば
      「連絡先」直下にフォルダを作成し連絡先を登録した上で試していただければと存じます。

  • ありがとうございます。
    私の理解不足で申し訳ございませんが、For Each…Next処理をどこから実行するのかわからなく…

    現在For Eachは
    For Each olItem In olConItems
    If TypeName(olItem) = “ContactItem” Then
    With olItem
    ~ ‘「全般」の入力項目を出力~
     End With
    lnContactCount = lnContactCount + 1
    End If
    Next olItem

    が入っております。
    ここの部分の書き換えになるのでしょうか。
    それともこの処理の後に追加になるのでしょうか。

    なかなか理解ができず申し訳ございませんが、よろしくお願いいたします。

    • 説明が足りておらず失礼いたしました。

      以下のように現在の処理を囲うようにFor Eachを追加いただければと思います。
      For Each olFolder In olNamespace.GetDefaultFolder(olFolderContacts).Folders
      Set olConItems = olFolder.Items
      For Each olItem In olConItems
      If TypeName(olItem) = “ContactItem” Then
      With olItem
      ~ ‘「全般」の入力項目を出力~
      Cells(lnContactCount, 1).Value = .CompanyName

      End With
      lnContactCount = lnContactCount + 1
      End If
      Next olItem
      Next olFolder

  • すみません、またまた質問させてください><
    個人用の連絡先のデフォルトで用意されている「連絡先」のデータはエクスポートできたのですが、その下にある追加の連絡先フォルダのエクスポートができませんでした。
    また、ユーザーによってどんなフォルダ名を作成しているか把握できないため
    「”*”」でいけるかと思ったのですが駄目でした。
    Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts).Folders(“*”)

    個人用の連絡先の配下全てのフォルダのアドレス帳をエクスポートすることは可能なのでしょうか。

    すいませんが、よろしくお願いいたします。

    • 連絡先の配下全てのフォルダを対象にアドレス帳をエクスポートする方法は、
      For EachでFoldersコレクションの要素を繰り返し取得すれば可能です。
      例えば以下のようにします。
      For Each olFolder In olNamespace.GetDefaultFolder(olFolderContacts).Folders
      Set olConItems = olFolder.Items

      ….出力処理….

      Next olFolder

      なお、この方法はFoldersコレクションに含まれるデフォルトのフォルダも対象となり、
      キャッシュ情報やデフォルトの連絡先アイテムなども出力されますので、
      Excel側で不要なデータがあれば削除するようお願い致します。

  • コメント失礼いたします。本サイトのおかげで大変参考になりました。
    申し訳ございませんが、1点質問させていただきます。

    マクロはエラーなく完了し、連絡先データもエクスポートできたのですが
    グループ登録している連絡先だけ反映されておりませんでした。

    やはりグループ登録のエクスポートは難しいのでしょうか。

    以上、よろしくお願いいたします。

    • いつもご利用ありがとうございます。

      グループ登録している連絡先データの出力につきまして、連絡先アイテム(ContactItemオブジェクト)のプロパティ構成と異なるため対応はしておりません。

      グループを出力対象とする場合は、以下のようにタイプ「DistListItem」で判定し、DistListItemオブジェクトのプロパティを割り当てる必要があります。

      ‘配布リスト(グループ)の場合の出力処理
      If TypeName(olItem) = “DistListItem” Then
      With olItem
      Cells(lnContactCount, 1).Value = .Body ‘メモ
      Cells(lnContactCount, 2).Value = .DLName ‘グループ名
      End With
      End If

      DistListItemのプロパティ一覧については以下公式サイトをご参考ください。
      https://docs.microsoft.com/ja-jp/office/vba/api/outlook.distlistitem

  • ついに完成しました。
    今までご教授いただきありがとうございました。
    アカウント変更に関しては今後の課題とし
    今回はこれで完成とします。
    本当にありがとうございました。

    • 完成されたとのことでこちらもうれしく思います。

      また不明点があれば気楽に連絡いただければと思います。

  • 回答ありがとうございます。
    ハイパーリンクを試したのですがエラーが出てしまいました。
    Cells(lnContactCount, 8).Value = .Email1Addressの下に、
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(lnContactCount, 8), Address:=Cells(lnContactCount, 8).Value, TextToDisplay:=Cells(lnContactCount, 8).Value
    を追加したところ上記部分でエラーが出てしまいました。
    色々と確認し、, TextToDisplay:=Cells(lnContactCount, 8).Valueを削除し
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(lnContactCount, 8), Address:=Cells(lnContactCount, 8).Valueだと実行完了しました。
    しかしハイパーリンクが上手くいかなかったので
    ActiveSheet.Hyperlinks.Add Anchor:=Cells(lnContactCount, 8), Address:=”mailto:” & Cells(lnContactCount, 8).Valueにするとハイパーリンクが実行され
    Outlookが立ち上がりました。
    ただメールアドレスがある連絡先は問題ないのですが
    メールアドレスが無い連絡先にmailto:だけのハイパーリンクが出来てしまいます。
    ご教授いただいたActiveSheet.Hyperlinks.Add Anchor:=Cells(lnContactCount, 8), Address:=Cells(lnContactCount, 8).Valueに”mailto:” &を追加してもエラーでした。
    解決方法はありますでしょうか。
    よろしくお願いいたします。

    • エラーの件は申し訳ありません。
      ”mailto:” を付けるべきでした。

      メールアドレスが無い連絡先にmailto:だけのハイパーリンクが付与されてしまうことを回避する件ですが、
      以下のような.Email1Address有無の判定を追加頂ければと存じます。
      If .Email1Address <> “” Then
      ActiveSheet.Hyperlinks.Add Anchor:=Cells(lnContactCount, 8), Address:=”mailto:” & Cells(lnContactCount, 8).Value
      End If
      よろしくお願いいたします。

  • 全部取りの記載ありがとうございます。
    今までの回答と合わせて大変参考になりました。
    BusinessAddressで取得すると郵便番号と住所が同一セル内で2行になるのですね。
    1行だとスッキリするのにと思いました。

    質問ばかりで申し訳ございません。
    メールアドレスを出力する際に
    ハイパーリンク化されたメールアドレスにする事はできるのでしょうか。
    さらにそのハイパーリンクリンク化されたメールアドレスをクリックして
    宛先を表示名にする事は出来るのでしょうか。

    いつもメールアドレスをクリックすると
    宛先にメールアドレスしか記載されないので
    せっかく表示名を作成しても有効活用できないのが
    いつも不便と思っていました。
    もし解決できるなら大変うれしいです。
    よろしくお願いいたします。

    • お役に立てたようでよかったです。

      BusinessAddressは改行が入りますね。
      1行にしたい場合は改行を取り除くか、
      ちょっと強引ですが、
      .BusinessAddressPostalCode & .BusinessAddressState & .BusinessAddressCity & .BusinessAddressStreet
      と結合しても良いかもしれません。

      >ハイパーリンク化されたメールアドレスにする事はできるのでしょうか。
      はい、Excelへの出力が完了した後となりますが、ハイパーリンクを付与することは可能です。

      Cells(lnContactCount, 8).Value = .Email1Address
      の下に、
      ActiveSheet.Hyperlinks.Add Anchor:=Cells(lnContactCount, 16), Address:=Cells(lnContactCount, 8).Value, TextToDisplay:=Cells(lnContactCount, 8).Value
      を追加してください。

      ハイパーリンク付与の方法に関しては以下の記事をご参考ください。
      https://extan.jp/?p=2166

      >さらにそのハイパーリンクリンク化されたメールアドレスをクリックして
      >宛先を表示名にする事は出来るのでしょうか。
      ハイパーリンクからOutlookのメールを開く方法ですと、表示名に変更(名前解決)するには手動で行う必要があります。
      「alt」+「K」キーを押して名前の確認を実行頂ければと存じます。

  • また会社名のよみがなの頭2文字だけ出力したい場合は
    どのようにすればよろしいでしょうか。
    よろしくお願いいたします。

    • 会社名のよみがなの頭2文字を出力する件ですが、
      まず、会社名のよみがなはYomiCompanyNameプロパティにありますのでこちらを指定します。

      次に左から2文字を抽出する方法はLeft関数を使用します。
      文字列にYomiCompanyNameプロパティ、文字数の引数に2をいれ、以下のようにします。
      Left(.YomiCompanyName, 2)

      先ほどのBodyプロパティの隣に出力する場合は以下を追加してください。
      Cells(lnContactCount, 12).Value = Left(.YomiCompanyName, 2)

      よろしくお願いいたします。

  • 回答ありがとうございます。
    複数アカウントに関しては別ドメインになってしまいますので
    ご提案いただいた方法だと無理という事でしょうか。

    またメモに関しては私の説明が良くなく勘違いさせてしまい申し訳ございません。
    連絡先情報の中の氏名やメールアドレスや住所の他にメモを記載する部分があり
    そのメモの部分を連絡先出力に追加したいと考えていました。
    今回回答いただいたメモの出力がその事と同じことで合っていますでしょうか。
    会社名がCompanyNameなのでメモが●●●という感じで
    出来ると思っていましたが全く違うという事でしょうか。

    的外れは質問となっていましたら申し訳ございません。
    よろしくお願いいたします。

    • メモに関しては申し訳ありません。「個人用のメモ」と勘違いをしておりました。
      連絡先情報の「メモ」とは異なりますので、ご放念頂きたくお願いいたします。

      連絡先情報の「メモ」はContactItemのBodyプロパティが該当しますので、
      VBAの
      Cells(lnContactCount, 10).Value = .MobileTelephoneNumber
      の下に
      Cells(lnContactCount, 11).Value = .Body
      を追加して実行頂ければと存じます。

      複数アカウントの件つきましては、GetSharedDefaultFolderメソッドを使う場合、
      現在ログインしているアカウントで、対象アカウントの情報が閲覧可能な状態になっている必要があるので、
      異なるドメインの場合は難しいと思われます。(ドメイン連携している場合は別です)
      一度GetSharedDefaultFolderメソッドに変えてご確認いただければと存じます。

  • 追加ばかりになり申し訳ございません。
    連絡先の項目でメモを出力したいのですが表に記載がありませんでした。
    メモは出力できないのでしょうか。
    よろしくお願いいたします。

  • 回答ありがとうございました。
    無事に出力できました。

    やはりアカウントを切り替えること無く書き出すことは難しいのでしょうか。
    出力したいアドレス帳は普段使用していないアカウントで
    出力する度にアカウントを切り替えて戻す作業が発生してしまうので
    出来れば複数アカウントから出力できれば助かります。
    よろしくお願いいたします。

    • 無事できたようでよかったです。

      アカウントを切り替えないで取得する方法ですが、
      同じドメインに参加しているアカウントであれば以下の方法で取得は可能です。

      Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts)

      strAddress = “***@***.jp” ‘取得したいアカウントのメールアドレスを指定してください。
      Set recOther = olNamespace.CreateRecipient(strAddress)
      Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts)
      に変更して実行してみてください。
      複数アカウントをまとめて出力する場合はアカウントリストつくり、
      リスト件数分をFor文で処理すればいけると思います。
      予定表版となりますが、似たような処理をおこなっていますのでご参考頂ければと存じます。
      https://extan.jp/?p=2802

  • 本サイト拝見し大変参考になりました。
    これから設定したいと考えているのですが
    下記条件の場合の設定方法をご教授ください。

    ・OUTLOOK内に2つ以上アカウントを設定しており、
     その中の1つのアカウントの連絡先を対象にする。
    ・連絡先は複数にフォルダ分けをしアドレス管理をしており
     その特定のフォルダ内のアドレス帳だけをEXCELへ書き出す/読み込む。

    よろしくお願いいたします。

    • いつもご利用ありがとうございます。

      ご質問につき以下にご回答申し上げます。
      ・1つのアカウントの連絡先を対象にする。
       →GetDefaultFolderは現在ログオンしているユーザの規定のフォルダが取得対象となりますので、ユーザを切り替えて使い分けをして頂ければと存じます。

      ・特定のフォルダ内のアドレス帳だけをEXCELへ書き出す/読み込む。
       →olNamespace.GetDefaultFolder(olFolderContacts)にFolders(“<追加連絡先フォルダ名>”)を追加頂ければと存じます。
       例えば連絡先のフォルダ名が”追加連絡先フォルダ”である場合は、
       Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts).Folders(“追加連絡先フォルダ”)
       となります。

      よろしくお願いいたします。

  • コメントを残す

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