Outlookの連絡先一覧をExcelへ一括出力したいときはないでしょうか。
そんなときに悩むことは、
・VBAを使いOutlookの連絡先一覧をExcelへ一括出力したいが方法がわからない
・出力したい連絡先の項目の指定方法がわからない
ですね。
今回はOutlookの連絡先を確認する際に便利な
・入力項目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”だった場合に処理を進めるようにしています。
また連絡先の項目はプロパティに格納されており、今回は以下の項目に絞っています。
部署名:.Department
姓:.LastName
姓フリガナ:.YomiLastName
名:.FirstName
名フリガナ:.YomiFirstName
姓名:.FullName
メールアドレス:.Email1Address
メールアドレス表示名:.Email1DisplayName
携帯番号:.MobileTelephoneNumber
連絡先のすべて項目は以下となっていますので、必要に応じて取捨選択頂ければと思います。
例えば11番目の列に「Email2Address」を追加する場合は、
のようにしてください。
名前 | 説明 |
---|---|
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か所のみです。
に
を追加します。
例えば連絡先のフォルダ名が「追加連絡先フォルダ」である場合は、
となります。
<追加>複数のフォルダの連絡先情報をまとめて出力する
読者の方より複数のフォルダの連絡先情報をまとめて出力する方法はないか要望がありましたので、追記致します。
・追加フォルダ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列にフォルダ名が出力されます。
キャッシュ情報やデフォルトの連絡先アイテムなども出力されますので、
Excel側で不要なデータがあれば削除するようお願い致します。
さいごに
いかがでしょうか。
今回は
・入力項目87個をまとめて出力するVBA
についてまとめました。
普段よく使う連絡先だからこそ管理をカンタンにしてミスがないようにしたいですね。
昨年はありがとうございました。
作成した連絡帳の抽出を運用しているのですが
一点機能を追加したくご質問させていただきます。
マクロ実行ボタンを作成し実行しているのですが、
ボタンを押した際に、マクロに記載している特定のユーザーのみ実行でき、
その他のユーザーは許可が無いみたいなメッセージボックスを出す、
みたいな権限機能を追加したいのですが可能でしょうか。
よろしくお願いいたします。
いつもご利用ありがとうございます。
特定のユーザーのみマクロを実行できるかのご質問につきまして、
簡易的ではありますが以下のような処理を追加すれば実現可能となります。
許可リストの値は適宜変更頂ければと存じます。
サンプルコード
—–
‘許可リストとなる配列を作成します。「,」区切りでユーザ名を入力してください。
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メソッドに変えてご確認いただければと存じます。
追加ばかりになり申し訳ございません。
連絡先の項目でメモを出力したいのですが表に記載がありませんでした。
メモは出力できないのでしょうか。
よろしくお願いいたします。
メモをエクセルへ出力する記事を公開しましたので、よかったらご参考頂ければと存じます。
https://extan.jp/?p=5845
ご連絡ありがとうございます。
メモを出力する方法ですが、以下の記事をご参考頂ければと存じます。
※デバッグ出力のみとなりますことご了承願いします。
Excel出力版は別記事にて公開したいと思います。
https://extan.jp/?p=2620#GetDefaultFolder%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%A7%E6%8C%87%E5%AE%9A%E6%9C%9F%E9%96%93%E3%81%AE%E3%83%A1%E3%83%A2%E3%82%A2%E3%82%A4%E3%83%86%E3%83%A0%E3%82%92%E5%8F%96%E5%BE%97
回答ありがとうございました。
無事に出力できました。
やはりアカウントを切り替えること無く書き出すことは難しいのでしょうか。
出力したいアドレス帳は普段使用していないアカウントで
出力する度にアカウントを切り替えて戻す作業が発生してしまうので
出来れば複数アカウントから出力できれば助かります。
よろしくお願いいたします。
無事できたようでよかったです。
アカウントを切り替えないで取得する方法ですが、
同じドメインに参加しているアカウントであれば以下の方法で取得は可能です。
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(“追加連絡先フォルダ”)
となります。
よろしくお願いいたします。