【VBA】Outlookの連絡先情報をExcelデータから一括更新する方法

着任者に対する業務引き継ぎや組織改組等でOutlookの連絡先情報を一括更新したいことがあるかと思います。

そんな時によく困ることは、

・連絡先の情報をひとつひとつ変えることは面倒
・連絡先一覧をExcelで管理しているがインポートの方法がわからない
・組織改組で部署名が変わって、一括変更したいが方法がわからない

ではないでしょうか。

今回は、

出力したExcelワークシートの連絡先を一部編集し、その内容をOutlook連絡先へ反映させる方法

についてご紹介します。

Excel側の連絡先一覧をOutlookの連絡先へ反映する方法について

今回もVBAの実装先はExcelブック側となります。
前回Excelに出力した連絡先一覧を使いますので、準備ができていない方はお手数ですが前回の記事を参考に連絡先一覧を用意してください。

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

サンプルシナリオとしては、組織改組で部署名が変更、統合したという前提で以下のように部署名を変更をしたいと思います。

に変えます。

今回の処理フローは以下の通りとなります。
第一メールアドレスをキーにして一致した連絡先情報を更新する方法となりますので、
メールアドレスの変更はできないことに注意してください。

Excelブック(VBA) → このメアドと一致した人の連絡先に反映してね。 → Outlook ちょいまち。
Excelブック ← メアドと一致した人の連絡先は更新したよ。一致しなかった人はしてないけどね。 ← Outlook 処理できた。

今回Outlookの連絡先を更新するにあたり注意すること

タカヒロ
タカヒロ
Outlookの連絡先を更新する際は必ずバックアップを行い、
万が一誤った情報に変わってしまった場合に切り戻しが行えるようにしましょう。

Outlook上にて以下の順で操作をするとcsvファイル形式かPST形式で出力することができますのでご参考ください。

「ファイル」>「開く/エクスポート」>「インポート/エクスポート」>「ファイルにエクスポート」>「コンマ区切り値」

「ファイル」>「開く/エクスポート」>「インポート/エクスポート」>「ファイルにエクスポート」>「Outlookデータファイル(PST)」

ではバックアップができたら早速実装をして動かしてみましょう。

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
    
    'スクリーンの更新は行われません。
    Application.ScreenUpdating = False
    
    'Excelのブックとワークシートのオブジェクトを設定します。
    Set wbBook = ThisWorkbook
    Set wsSheet = wbBook.Worksheets(1)

    '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
    wsSheet.Activate
    
    If MsgBox("連絡先を更新しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then

        '連絡先一覧の件数分繰り返す。
        For i = lnContactCount To Cells(1, 1).End(xlDown).Row
            '連絡先のメールアドレスをキーにして連絡先を検索
            Set olItem = olConItems.Find("[Email1Address]='" & Cells(i, 8) & "'")
            
            If TypeName(olItem) = "ContactItem" Then
                    With olItem
                        '連絡先の各項目へ値を代入
                        .CompanyName = Cells(i, 1)
                        .Department = Cells(i, 2)
                        .LastName = Cells(i, 3)
                        .YomiLastName = Cells(i, 4)
                        .FirstName = Cells(i, 5)
                        .YomiFirstName = Cells(i, 6)
                        .FullName = Cells(i, 7)
                        .Email1Address = Cells(i, 8)
                        .Email1DisplayName = Cells(i, 9)
                        .MobileTelephoneNumber = Cells(i, 10)
                    End With
                    'Outlookの連絡先へ保存
                    olItem.Save
            End If
        Next
        
        'オブジェクトを解放します。
        Set olItem = Nothing
        Set olConItems = Nothing
        Set olFolder = Nothing
        Set olNamespace = Nothing
        Set olApp = Nothing
   
        'スクリーンの更新を行います。
        Application.ScreenUpdating = True
        
        MsgBox "Outlook連絡先の反映が完了しました!", vbInformation

    Else
        MsgBox "処理を中断します"
    End If
    
End Sub

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

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

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

こちらで完了です。

早速実行してみよう

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

②確認画面がでたら「はい」を選択し、
以下のメッセージがでたら完成です!

Outlookの連絡先を確認してみる

さっそくOutlookの連絡先が更新されているか確認してみましょう。

変更前の部署名は以下の通りです。

変更後は、

はい!変わっていますね!

タカヒロ
タカヒロ
なお、Outlookの連絡先の情報反映にタイムラグがありすぐに反映されない場合があります。
その場合には別の人の連絡先を閲覧した後にみたい人の連絡先に戻ると更新がされますので、
試してみてください。

今回のVBAについて説明

Excel側の連絡先一覧の件数分処理を繰り返すように設定します。

For i = lnContactCount To Cells(1, 1).End(xlDown).Row

で、「Find」メソッドを使用し、連絡先の第一メールアドレスをキーにしてOutlookの連絡先のレコードを検索します。
「Find」メソッドの構文は以下の通りです。

oFolder.Items.Find("[項目] = '値'")

項目[Email1Address]が第一メールアドレスのことで、Cells(i, 8)はメールアドレスが格納されているセルの値を参照しています。

Set olItem = olConItems.Find(“[Email1Address]='” & Cells(i, 8) & “‘”)

オブジェクトolItemのタイプが”ContactItem”だったときにセルの値をOutlookに格納する処理を行います。なお、検索該当なしの場合は“Nothing”となり、この場合はスキップされます。

If TypeName(olItem) = “ContactItem” Then

.CompanyName = Cells(i, 1)
.Department = Cells(i, 2)
.LastName = Cells(i, 3)
.YomiLastName = Cells(i, 4)
.FirstName = Cells(i, 5)
.YomiFirstName = Cells(i, 6)
.FullName = Cells(i, 7)
.Email1Address = Cells(i, 8)
.Email1DisplayName = Cells(i, 9)
.MobileTelephoneNumber = Cells(i, 10)

仕上げにOutlookの連絡先へ保存します。

olItem.Save

さいごに

いかがでしょうか。

今回は、

出力したExcelワークシートの連絡先を一部編集し、その内容をOutlook連絡先へ反映させる方法

についてご紹介しました。

普段よく使う連絡先だからこそ管理も簡単にできたらよいですね。



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

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








3 件のコメント

  • 追加でコメントします。
    インポートについては、正常に終了する事ができまた。
    しかし、Outlookで内容を確認すると、全てが反映されている訳ではありませんでした。
    現在修正したい項目は、「表示名」になります。
    エクスポートされたものに、修正を加えてそれをインポートしようとしています。
    何かアドバイスを頂きたいです。

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

      outlook連絡先が一部しか反映されない件につきまして、
      現在の仕様ではメールアドレスを検索キーにして、該当する連絡先アイテムを更新するようにしていますので、
      メールアドレス欄が空、もしくはエクセル側とメールアドレスが異なる連絡先アイテムについては更新がされません。

      対応といたしましては、変更を行いたい連絡先アイテムのメールアドレス欄へエクセル側と同じ値を入力頂いた上、
      実行頂ければと存じます。

      なお、実行の際は検証および連絡先データのバックアップをされることをおすすめいたします。

      ※追記です。—–
      メールアドレスのほかに「会社」名が入っていない場合も抜け落ちる場合があります。
      以下の処理にて「会社」名が存在する分の行数を取得していますが、「会社」名が空の場合はその分の行はカウントされず、処理除外となります。
      ‘連絡先一覧の件数分繰り返す。
      For i = lnContactCount To Cells(1, 1).End(xlDown).Row
      対応といたしましては、「会社」名を入力いただくか、値が入っている列番号を指定頂ければと存じます。
      ‘例:「FullName」列指定
      For i = lnContactCount To Cells(1, 7).End(xlDown).Row

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

  • こちらのマクロを実行しましたが、「実行エラー ”1004”」が出てしまいます。
    VBAに詳しくないので、何が悪いのかわかりません。
    教示頂けますでしょうか。
    Outlookは365を使用しております。

  • コメントを残す

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