【VBA】Outlookの共有の連絡先をExcelシートへ一括出力する方法!追加フォルダも出力可!

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

例えば共有の連絡先を一度出力して整理したいときなどです。

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

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

ですね。

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

・VBAでOutlookの共有の連絡先一覧をExcelへ出力する方法
・VBAでOutlookの追加フォルダにある共有の連絡先一覧をExcelへ出力する方法

についてまとめます。

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

Outlookの共有の連絡先一覧をExcelへ出力するイメージについて説明します。

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

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

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

Excel側のVBAを実行すると、

Outlookの共有の連絡先情報が

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

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

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

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

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

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

以上です。

Outlookの共有の連絡先をExcelシートへ一括出力するVBA

Outlookの共有の連絡先をExcelシートへ一括出力するVBAを実装していきましょう。

VBAを実装する

VBAの実装先はExcelとなりますので、Excelブックを新規作成します。

サンプルコードは以下の通りとなります。

Sub Outlookの共有の連絡先をExcelへ出力する()

    '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
    Dim recOther 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"
        .Cells(1, 11).Value = "Body(Memo)"
        .Cells(1, 12).Value = "EntryID"

        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 recOther = olNamespace.CreateRecipient("<共有の連絡先のアドレスを指定>")
    Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, 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
                Cells(lnContactCount, 11).Value = .Body
                Cells(lnContactCount, 12).Value = .EntryID
                
            End With
            lnContactCount = lnContactCount + 1
        End If
    Next olItem
    
    '各オブジェクトを解放します。
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
    Set recOther = Nothing
            
    'スクリーンの更新を有効にします。
    Application.ScreenUpdating = True
    
    MsgBox "Outlookの共有の連絡先の出力が完了しました!", vbInformation
    
End Sub

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

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

③右ペインのウインドウに上記コードを入力し完了です。

VBAを設定する

VBAを設定していきましょう。

共有の連絡先のアドレス(メールアドレス、表示名)を指定します。

Set recOther = olNamespace.CreateRecipient("<共有の連絡先のアドレスを指定>")

タカヒロ
タカヒロ
共有の連絡先の見分け方は、連絡先へ表示されているアドレスが自分のアドレス以外のものであるかで判断をしましょう。

取得結果を記述する行番号を指定します。2を指定した場合2行目のセルから開始されることになります。

lnContactCount = 2

VBAを実行する

①「開発」タブの「マクロ」をクリックし「Outlookの共有の連絡先をExcelへ出力する」を選択し、「実行」をクリックします。

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

確認をしてみましょう。

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

VBAについて説明

VBAについて説明をします。

Excelのブックとワークシートのオブジェクトを設定します。

Set wbBook = ThisWorkbook

Excelの1シート目が出力先の対象となります。

Set wsSheet = wbBook.Worksheets(1)

Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの連絡先一覧を取得します。

Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")

共有の連絡先のアドレスを指定し、GetSharedDefaultFolderメソッドでContactItemというメンバーに格納されているアイテムを取得します。

Set recOther = olNamespace.CreateRecipient("<共有の連絡先のアドレスを指定>")
Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts)

olItemオブジェクトのタイプ名が”ContactItem”だった場合に処理を進めるようにしています。

If TypeName(olItem) = “ContactItem” Then

出力する連絡先の項目を指定します。

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

上記以外の連絡先項目プロパティは以下となっていますので、必要に応じて追記頂ければと思います。

例えば13番目の列に「Email2Address」を追加する場合は、

Cells(lnContactCount, 13).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 連絡先の姓のふりがな (型) を示す文字列を設定または返します。読み取り/書き込み。

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

共有の連絡先へ追加したフォルダの連絡先情報を出力する方法について説明をします。

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

olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts)

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

を追加します。

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

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

となります。

タカヒロ
タカヒロ
「オブジェクトが取得できない」エラーが表示されたらフォルダに対して参照できるアクセス権がない可能性がありますので、権限を確認しましょう。

うまく共有の連絡先の出力ができない場合の対処法

なかなかうまく共有連絡先の出力ができない問い合わせがいくつかありましたので、以下の順序で確認してみてください。

1.PCが参照したい共有連絡先のアカウントと同一のドメインに参加しているか確認をする

PCが参照したい共有連絡先のアカウントと同一のドメインに参加しているか確認をお願いします。
例えばローカルアカウントや別ドメインに参加している場合は参照できません。

タカヒロ
タカヒロ
以下のエラーメッセージが表示されます。
「レジストリまたはインストールに問題があるため、操作は失敗しました。Outlook を再起動し、もう一度実行してみてください。まだ問題が解決しない場合は、Outlook を再インストールしてください。」

理由はGetSharedDefaultFolderメソッドはVBAの実行ユーザー(つまりPCにログインしているユーザー)にてExchange上の情報を参照するので、Exchange上に存在しないユーザーである場合は認証に失敗するためです。

2.規定のユーザーの連絡先にあるか確認をする

複数アカウントを設定している場合は、取得したい連絡先が規定のユーザーの連絡先になっているか確認をします。
既定になっていない場合は、取得したいユーザーを既定に設定してください。

3.共有連絡先の場所が「連絡先」フォルダとなっているか確認をする

共有連絡先の場所が「連絡先」フォルダ、サブフォルダ指定の場合は「連絡先」フォルダ配下になっているか確認をしましょう。

ユーザーフォルダ:共有元ユーザー
↓取得対象フォルダ
 1層目:連絡先
  2層目:追加連絡先フォルダ

↓以下は取得不可
1層目:既定外連絡先フォルダ
1層目:受信トレイ
1層目:送信トレイ
1層目:送信済みアイテム
1層目:予定表
1層目:迷惑メール
1層目:タスク

4.フォルダ名が間違っていないか確認をする

サブフォルダ指定の場合はフォルダ名がVBAの設定値と一致しているか確認をしましょう。

【裏技】ローカルユーザーでも共有の連絡先を取得する方法

PCが参照したい共有連絡先のアカウントと同一のドメインに参加していない場合はGetSharedDefaultFolderメソッドは使えません。

ただ、業務都合上、どうしてもローカルユーザーで外部ドメインの共有の連絡先を参照する必要がある場合があるかと思いますので、GetSharedDefaultFolderメソッドを使わない別の取得方法について説明をします。

タカヒロ
タカヒロ
エク短オリジナルの方法となります。
こちらの環境で検証をいたしましたが、すべてのパターンを網羅しているわけではありませんので、
環境に合わない場合がありますことご了承願います。

Step1:ユーザーフォルダの位置番号を確認する

ユーザーフォルダの位置番号を確認していきます。

例えば3つのアカウントがOutlookへ登録されていれば、連絡先を取得したいアカウントが3つの内、何番目に位置するか確認をします。

ユーザーフォルダの位置番号を確認するには以下のVBAを実行し、VBEのイミディエイトウィンドウ(Ctrl+Gで表示されます。)を表示させ、出力結果を確認します。

Sub Outlookフォルダチェッカー()
    'Outlook用の定義
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.Namespace
    Dim olFolderstemp As Outlook.Folders
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim strTemp As String
        
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolderstemp = olNamespace.Folders

    For i = 1 To olFolderstemp.Count
        strTemp = strTemp & i & "番目ユーザーフォルダ:" & olFolderstemp(i).Name & Chr(13)
        
        If olFolderstemp(i).Folders.Count > 0 Then
            For j = 1 To olFolderstemp(i).Folders.Count
                strTemp = strTemp & " 1層目:" & olFolderstemp(i).Folders(j).Name & Chr(13)
                If olFolderstemp(i).Folders(j).Name = "連絡先" And olFolderstemp(i).Folders(j).Folders.Count > 0 Then
                    For k = 1 To olFolderstemp(i).Folders(j).Folders.Count
                        strTemp = strTemp & "  2層目:" & olFolderstemp(i).Folders(j).Folders(k).Name & Chr(13)
                    Next
                End If
            Next
        End If
    Next

    MsgBox "ルートフォルダのチェック/出力完了!VBEのイミディエイトウィンドウ(Ctrl+G)で出力結果を確認してください。", vbInformation
    Debug.Print strTemp

    Set olApp = Nothing
    Set olNamespace = Nothing
    Set olFolderstemp = Nothing

End Sub

実行してみましょう。

以下のような形で出力されていることが確認できます。

**番目ユーザーフォルダ:****@extan.jp
1層目:削除済みアイテム
1層目:受信トレイ
1層目:送信トレイ
1層目:送信済みアイテム
1層目:クイック操作設定
1層目:連絡先
2層目:追加連絡先フォルダ
・・・・

「**番目」がユーザーフォルダの位置番号となりますので、取得したいアカウントの番号をメモします。

タカヒロ
タカヒロ
「連絡先」フォルダ名が「連絡先」でない場合は2階層目以降取得できません。取得したい場合は以下の”連絡先”を変更するか、「olFolderstemp(i).Folders(j).Name = “連絡先” And」を削除して実行をしてください。
If olFolderstemp(i).Folders(j).Name = “連絡先” And olFolderstemp(i).Folders(j).Folders.Count > 0 Then

Step2:連絡先取得VBAを変更する

次に上記で紹介しました連絡先取得VBAを変更していきます。
また、「**番目」の数値を「Folders(**)」へ入力してください。

■変更前

Set recOther = olNamespace.CreateRecipient("<共有の連絡先のアドレスを指定>")
Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts)

■変更後

Set olFolder = olNamespace.Folders(**).Folders("連絡先")

タカヒロ
タカヒロ
連絡先のサブフォルダを指定したい場合は、
olNamespace.Folders(**).Folders(“連絡先”).Folders(“<サブフォルダ名>”)
としてください。
また「連絡先」デフォルトフォルダではなく別階層にある連絡先フォルダを指定したい場合は
olNamespace.Folders(**).Folders(“<1層目フォルダ名>”).Folders(“<2層目フォルダ名>”)
の形式で指定をするようにしてください。

こちらで設定完了です。

ローカルユーザーでも共有の連絡先を取得する方法の注意点

連絡先の取得はできましたでしょうか?

ローカルユーザーでも共有の連絡先を取得する方法について紹介しましたが、
注意点が1点あります。

それは、ローカルのフォルダにある連絡先情報を参照しているため、同期元であるExchangeとの差異がある場合があることです。

ですので、PCがオフラインであれば、必ずオンラインにしてExchangeと同期状態にした上、VBAの実行をするようにしてください。

【裏技改良版】ローカルユーザーでも共有の連絡先を取得する方法Ver2

上記でご紹介しました「ローカルローカルユーザーでも共有の連絡先を取得する方法」について、Outlookの再起動後に取得できない可能性があることがわかりましたので、その原因と修正したVBAの内容について説明をします。

不具合の内容とVBAの修正箇所

上記にご紹介しました「ローカルユーザーでも共有の連絡先を取得する方法」ではルートとなるユーザ―フォルダを、位置番号にて特定しオブジェクトを取得する仕様となっています。

しかしながら、Outlookを再起動したりするとその位置番号が変わってしまうようで、そうなった場合、指定番号のフォルダの連絡先情報が取得できなかったり、他のユーザーフォルダの連絡先情報が取得されてしまうこととなります。

そこで、位置番号を直接Foldersコレクションに指定するのではなく、都度ユーザーフォルダ名で検索し該当する位置番号をFoldersコレクションに指定するよう変更をおこなうことにより、不具合を回避するようにしました。

具体的な箇所は、以下の通りです。
■変更前

Set olFolder = olNamespace.Folders(**).Folders("連絡先")

■変更後

Set olFolderstemp = olNamespace.Folders

For i = 1 To olFolderstemp.Count
If InStr(olFolderstemp(i).Name, “<ユーザーフォルダ名>”) Then
Set olFolder = olNamespace.Folders(i).Folders(“連絡先”)
Exit For
End If
Next

これまでFolders(**)の**に位置番号を指定してきましたが、

If InStr(olFolderstemp(i).Name, "<ユーザーフォルダ名>") Then

でユーザーフォルダ名が含まれているかチェックし、

Set olFolder = olNamespace.Folders(i).Folders("連絡先")

 

該当した場合、処理回数をFoldersコレクションの位置番号に設定するようにしています。

なお、ユーザーフォルダ名についてはフォルダチェッカーで実行した結果の以下赤字の部分を選択するようにしてください。

**番目ユーザーフォルダ:****@extan.jp
1層目:削除済みアイテム
1層目:受信トレイ
1層目:送信トレイ
・・・・

 

変更したサンプルのVBAは以下の通りです。

修正版VBAコード

Sub Outlookの共有の連絡先をExcelへ出力する_裏技Ver2()

    '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
    Dim recOther As Object
    Dim olFolderstemp As Outlook.Folders
    
    'Excel用の定義
    Dim wbBook As Workbook
    Dim wsSheet As Worksheet
    Dim lnContactCount As Long
    
    'スクリーンの更新を無効にします。
    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"
        .Cells(1, 11).Value = "Body(Memo)"
        .Cells(1, 12).Value = "EntryID"

    End With
    
    wsSheet.Activate
    
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの連絡先一覧を取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolderstemp = olNamespace.Folders
    
    For i = 1 To olFolderstemp.Count
        If InStr(olFolderstemp(i).Name, "<ユーザーフォルダ名>") Then
            Set olFolder = olNamespace.Folders(i).Folders("連絡先")
            Exit For
        End If
    Next

    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
                Cells(lnContactCount, 11).Value = .Body
                Cells(lnContactCount, 12).Value = .EntryID
                
            End With
            lnContactCount = lnContactCount + 1
        End If
    Next olItem
    
    '各オブジェクトを解放します。
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olFolderstemp = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
            
    'スクリーンの更新を有効にします。
    Application.ScreenUpdating = True
    
    MsgBox "Outlookの共有の連絡先の出力が完了しました!", vbInformation
    
End Sub

さいごに

いかがでしょうか。

今回は

・VBAでOutlookの共有の連絡先一覧をExcelへ出力する方法
・VBAでOutlookの追加フォルダにある共有の連絡先一覧をExcelへ出力する方法

についてました。

この方法で共有の連絡先情報をより効率よく把握できますので、活用いただければと思います。



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

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



タカヒロ

タカヒロ
実質無料で読めるExcelVBA本についてまとめました。
もしVBA本購入を検討されていたら、どれだけお得か確かめてみてください。

【¥0】実質無料のExcelVBAおすすめ本25選!初級~中級まで網羅!

20 件のコメント

  • ご回答ありがとうございます。
    VBAでインポート/エクスポートは難しいという事なんですね。
    私の知識では独自に組み立てれないので今回は断念します。
    色々とご教授いただきありがとうございました。

  • 回答ありがとうございます。
    私の質問の仕方がわかりづらく申し訳ございません。
    抽出したEXCELをCSV変換では無く、outlookの連絡先を一括してエクスポートする
    VBAがあればなと思い質問させていただきました。
    そのような事はできるのでしょうか。

    インポートに関しては手動で行う事で対応したいと思います。

    • ExcelデータをCSV変換することではないこと失礼しました。
      OutlookのGUI(画面)上のインポート/エクスポート機能をVBAでできるかということでよいでしょうか?
      その場合インポートと同様に専用メッソドは用意されていないようですので、VBAで実現させるためには近い機能を独自に組み立てる必要があるというご回答になります。
      よろしくお願いいたします。

  • 言葉足らずでした。
    現在のVBAでのEXCEL出力したあと、共有連絡先のcsvもしくはpstデータを
    あるフォルダに保存するVBAを検討しています。
    これは、バックアップを念のため取りたいためです。
    抽出したEXCELからoutlookへ戻す方法を展開頂いていますが
    運用上できれば避けたく思っております。
    因みにcsvもしくはpstデータからoutlookへインポートする
    VBAもあったりするのでしょうか。
    よろしくお願いいたします。

    • 抽出できたようでよかったです。

      前のご質問のcsvデータをエクスポートしてどこかに保存するVBAについて、以下の記事にてまとめておりますので、ご参考ください。
      https://extan.jp/?p=5495

      pstデータからoutlookへインポートするVBAについて、ざっと調べたところインポート専用のメソッドは確認できず、バックアップPSTをAddStoreメソッドでアタッチして、指定のフォルダへアイテムをコピーする処理を組み込めば実現できるかと存じますが検証し確認する必要があるでしょう。

      バックアップしたファイルから復元することを目的とするなら、GUI(画面)上のインポート/エクスポートから操作した方が確実かもしれません。

  • 返答が遅くなりました。
    ついに抽出する事ができました。
    ありがとうございました。

    実は今回のEXCELに出力するVBAに機能を追加したいと考えております。
    EXCELへ出力した後、共有連絡帳のcsvデータをエクスポートして
    どこかに保存するVBAは出来るのでしょうか。

    何度も質問ばかりで申し訳ございませんが
    よろしくお願いいたします。

  • ご報告が遅くなりました。
    裏技Ver2ありがとうございます。
    Microsoftに確認しながら進めていますが、
    MSの仕様なのか中々うまく出来ずにいる状況です。

    MSの仕様で色々と不都合があり現在は、
    共有方法をMS365の機能のパブリックフォルダで試みてます。
    その際に、チェッカーで検索すると

    ※番目ユーザーフォルダ::パブリック フォルダー – ***@****.onmicrosoft.com
     1層目:お気に入り??
     1層目:すべてのパブリック フォルダー
    と出てきます。
    すべてのパブリックフォルダー内に共有連絡先フォルダがあり、
    その中に共有連絡先を作成しているのですが
    その部分をEXCELへ抽出する事はできますでしょうか。
    チェッカーで検索しても出てこないので難しいでしょうか。

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

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

      パブリックフォルダー内に共有連絡先フォルダがある場合の指定方法につきまして、
      裏技Ver2ですと以下のようにすれば可能かと存じます。
      For i = 1 To olFolderstemp.Count
      If InStr(olFolderstemp(i).Name, “***@****.onmicrosoft.com”) Then
      Set olFolder = olNamespace.Folders(i).Folders(“すべてのパブリック フォルダー”).Folders(“共有連絡先”)
      Exit For
      End If
      Next

      チェッカーで抽出されない件は、1階層目に「連絡先」フォルダ名があれば2階層目を掘り下げる条件となっておりますので、
      フォルダ名「連絡先」を限定する条件、
      「olFolderstemp(i).Folders(j).Name = “連絡先” And」
      を削除していただければと存じます。
      なお、この場合処理時間が長くなる場合がありますことご了承ください。

  • 回答ありがとうございます。
    裏技にて出力する事ができました。
    本当にありがとうございました。
    ただ、やっとできたと思ったのですが
    outlook再起動や時間経過?するとエラーになってしまいました。
    フォルダチェッカーで確認すると位置番号が何故か変わってました。
    何故かわったのか不明な為、
    複数の位置番号とフォルダ名を検索?しながら出力する事は可能でしょうか。
    よろしくお願いいたします。

  • 回答ありがとうございます。
    ドメインに参加しているPCから実行とは、
    outlookやexcelを****.onmicorosoft.comのアカウントで使用するという事でしょうか。
    それともPCのログインアカウントを****.onmicorosoft.comにする
    (PCの所属するグループのドメインを****.onmicorosoft.com
     フルコンピューター名:コンピューター名.****.onmicorosoft.com)
    にするという事でしょうか。

    officeソフトは****.onmicorosoft.comのアカウントで使用中ですが
    PCログインのドメインは****.onmicorosoft.comではありません。
    ドメイン変更は難しい為、裏技がありましたら
    お力添えくださいますようお願い申し上げます。

  • 回答ありがとうございます。

    パブリックフォルダは外れる形になるという事は
    今回のようなパブリックフォルダでの連絡先の共有方法だと出力できないという事ですね。中々難しいです。

    別の共有方法として、共有メールボックスを作成し
    アドレスを共有する方法があり、その方法の場合で検証してみました。

    共有メールボックスの作成情報は
    共有メールボックス名称:共有連絡先用
    共有メールアドレス:shared-contacts@****.onmicrosoft.com
    で作成しました。

    自分のアカウントの下に、共有連絡先用がでてき
    受信トレイ、下書き、送信済みアイテム・・・と
    通常のアカウントのようなものがOUTLOOKに作成されました。
    アドレス帳も
    個人用の連絡先 
     連絡先  ― 自分のカウント
     連絡先 ― 共有連絡先
      メーカー連絡先
    となりました。
    プロパティの場所は \\共有連絡先用\連絡先 となっています。
    上記環境で、
    Set recOther = olNamespace.CreateRecipient(“shared-contacts@****.onmicrosoft.com”)
    Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts).Folders(“メーカー連絡先”)
    としましたが、エラーとなってしまいました。
    (エラーはレジストリまたはインストールに問題がとでました)
    CreateRecipientを(“共有連絡先用”)としてもダメでした。
    (エラーはoutlookで認識できない名前とでました)

    やはり無理なのでしょうか。
    ご教授いただけますと幸いです。
    よろしくお願いいたします。

    • 共有メールボックスの設定については問題ないかと思います。

      また、「レジストリまたはインストールに問題」のエラーですが、
      「****.onmicrosoft.com」ドメインに参加しているPCから実行し確認いただけますでしょうか。

      GetSharedDefaultFolderメソッドは参加ドメインのExchange情報を参照しますので、
      例えばローカルユーザなどドメイン参加していないユーザーから接続した場合は到達できず、上記エラーとなります。

      それも難しければ、検証中ですが、Exchange同期先であるローカルフォルダから取得する裏技をご紹介したいと思います。

  • 回答ありがとうございます。
    共有連絡先の場所の表示ですが、Microsoftへ確認したところ
    現在の共有方法ではパスの取得は困難との回答がありました。
    その為、共有方法を変更しパブリックフォルダで共有する事に変更しました。

    共有連絡先のパスが
    \\パブリック フォルダー – aaaa@****.onmicrosoft.com\すべてのパブリック フォルダー\共有連絡先フォルダ
    と表示されたので、
    Set recOther = olNamespace.CreateRecipient(“\\パブリック フォルダー – aaaa@****.onmicrosoft.com\すべてのパブリック フォルダー\共有連絡先フォルダ”)
    Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts).Folders(“共有連絡先”)
    としたのですが、
    実行時エラー 2147221219(8004011d)
    レジストリまたはインストールに問題があるため、操作は失敗しまいた、再起動してください、とエラーになります。
    再起動しても変わらずエラーのままです。

    原因はパブリックフォルダでの共有になりますでしょうか。
    色々と申し訳ございませんがよろしくお願いいたします。

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

      Exchange上の共有設定が特殊のようですね…
      すみません、こちらもうまく事象再現できないため、わかる範囲でご回答いたします。

      GetSharedDefaultFolderメソッドはユーザメールボックスの規定フォルダを対象しますのでパブリックフォルダは外れる形になると思われます。
      また、エラーですがCreateRecipient メソッドの引数が間違っています。対象ユーザのアドレス名やSMTPアドレスを指定する必要があります。
      あとは、Foldersコレクションに指定フォルダ名が存在するかデバッグしてご確認頂けますでしょうか。

  • また共有の連絡先にある共有連絡先のプロパティを見ると
    場所の部分が空欄となっています。場所を指定する事はできるのでしょか。

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

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

      「共有連絡先」フォルダの位置がGetSharedDefaultFolderメソッドでは拾えない既定外の位置にある可能性がありますので、
      ユーザーAにて「共有連絡先」フォルダを「連絡先」フォルダへ移動した上、再度ご確認頂けますでしょうか。
      操作はフォルダ右クリック>フォルダーの移動>ユーザーA「連絡先」フォルダ選択>「OK」クリック となります。

      アドレスの指定につきましては、
      Set recOther = olNamespace.CreateRecipient(“aaa@****.onmicorosoft.com”)
      で問題ございません。

      左メニューの位置につきましては、取得に影響する部分ではありませんので、
      「共有の連絡先」にあっても大丈夫です。

  • 共有の連絡先の出力の方法を回答いただきありがとうございます。
    作成してみたのですが、どうも上手く出来ないのでご教授いただけますでしょうか。

    環境はoffice365のアカウントを使用し連絡先を共有しております。
    ユーザーA :aaa@****.onmicorosoft.com
    ユーザーB :bbb@****.onmicorosoft.com
    ユーザーC:ccc@****.onmicorosoft.com
    ユーザーAの連絡先に共有連絡先のフォルダを作成しと3名で共有しています。
    BやCで教えて頂いたVBAを実行すると、
    Set olFolder = olNamespace.GetSharedDefaultFolder(recOther, olFolderContacts).Folders(“共有連絡先”)
    の部分でオブジェクトが見つからないエラーとなってしまいます。

    Set recOther = olNamespace.CreateRecipient(“<共有の連絡先のアドレスを指定>”)
    の共有の連絡先のアドレスが間違えているのでしょうか。
    こちらのアドレスはaaa@****.onmicorosoft.comで合っていますでしょうか。
    それともユーザー名のユーザーAにするのでしょうか。

    またOutlookの共有の連絡先一覧をExcelへ出力するイメージの部分のOutlookの共有の連絡先情報が、の画像では「個人用の連絡先」にありますが、
    連絡先を確認すると「個人用の連絡先」ではなく「共有の連絡先」になっています。
    今回は共有の連絡先の中にあるフォルダを出力したいので、できないのでしょうか。

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

  • コメントを残す

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