【Outlook VBA】Outlook連絡先を一括更新する方法

Outlook連絡先を一括更新したいときはないでしょうか。

たとえば改組などでOutlook連絡先の「部署」項目を一括変更したいときなどです。

そんな時に悩むことは、

・Outlook連絡先を一括更新したいが方法がわからない
・VBAでOutlook連絡先を一括更新したいが方法がわからない

ですよね。

今回はそんなお悩みを解決する、
Outlook連絡先を一括更新する方法について
ご紹介します。

Outlook連絡先を一括更新するイメージ

今回のシナリオは組織改組があり、「人事総務部」から「人事部」へ部署名が変更になったということを想定します。

変更対象はOutlook連絡先に登録されている各ユーザの「部署」となります。

「人事総務部」を「人事部」へ変更する処理をしていきます。

連絡先を一括変更できるのでとても便利ですね!

それでは早速実装してみましょう!

マクロを設置する下準備をする。

以下を参考にVBAコードを配置する場所を表示させます。

Outlook VBAをはじめよう!初心者向け手引き

この設定が終えたら一度Outlookを再起動させてください。

Outlook連絡先を一括更新するVBA

Outlook連絡先を一括更新する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
    
    Dim SearchKey As String
    Dim changeWord As String
    Dim CountNum As Long
    
    '置換対象のワード
    SearchKey = "人事総務部"
    
    '置換後のワード
    ChangeWord = "人事部"
    
    CountNum = 0

    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの連絡先一覧を取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts)
    Set olConItems = olFolder.Items
            
    Dim rc As Integer
    rc = MsgBox("連絡先を更新しますか?", vbYesNo + vbQuestion, "確認")
    
    If rc = vbYes Then
    
        '連絡先のメールアドレスをキーにして連絡先を検索
        Set olItem = olConItems.Find("[Department]='" & SearchKey & "'")
        While TypeName(olItem) = "ContactItem"
        
            With olItem
                '連絡先の各項目へ値を代入
                .Department = ChangeWord
            End With
            'Outlookの連絡先へ保存
            olItem.Save
        
            CountNum = CountNum + 1
            
            Debug.Print olItem.FullName & ":" & olItem.Department & ":" & CountNum & "件"
            Set olItem = olConItems.FindNext
        Wend
        Debug.Print "合計" & CountNum & "件、「" & SearchKey & "」を「" & ChangeWord & "」へ更新をしました"

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


    'Null out the variables.
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
    
End Sub

VBAを設定する

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

以下に置換対象のワードおよび、置換後のワードを指定します。
サンプルでは「人事総務部」が検索キーワード、「人事部」が置換ワードとしました。

‘置換対象のワード
SearchKey = “人事総務部”

‘置換後のワード
ChangeWord = “人事部”

マクロを登録する

「開発」タブ>「Visual Basic」を押します。

「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] > [ThisOutlookSession] を開きます。

右クリックし、「挿入」、「標準モジュール」を選択します。

「標準モジュール」「Module1」を選択し、右のコードエリアへ、コードを貼り付けて保存します。

今回は「イミディエイトウィンドウ」を利用しますので、VBEのメニューの「表示」から「イミディエイトウィンドウ」を選択し、表示させてください。

VBA実行前にバックアップをとる

Outlookの連絡先を更新する前にバックアップをとり、

万が一誤った情報に変わってしまった場合に切り戻しが行えるようにしましょう。

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

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

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

VBAを実行する

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

メニューの➡アイコンか「F5」を押してマクロを実行します。

はい!「イミディエイトウィンドウ」に置換結果が表示されましたね!

では、連絡先をみてみましょう。

はい、[部署]が変更されていますね。

前回のFindメソッドを利用して「人事部」のリストを出してみましょう。
検索キーワードに「人事部」を設定し、メニューの➡アイコンか「F5」を押してマクロを実行します。

はい、結果は問題ないようですね。

VBAの説明

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

連絡先のメールアドレスをキーにして連絡先を検索します。
サンプルでは「部署」の値に「人事総務部」があるアイテムを検索しています。

Set olItem = olConItems.Find(“[Department]='” & SearchKey & “‘”)

連絡先の部署に該当するプロパティへ変更後の値を代入します。
「部署」である「Department」へ「人事部」を代入する形になります。

.Department = ChangeWord

Outlookの連絡先へ保存します。

olItem.Save

Saveメソッドはアイテムを保存・上書き保存します。

構文は以下の通りです。

Object(Item).Save

Item単体を指定する必要があることに注意してください。

さいごに

いかがでしょうか。

今回はOutlook連絡先を一括更新する方法についてご紹介しました。

「部署」以外に「電話番号」などほかの項目も同じ要領で一括置換が可能ですので、試してみてください。



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

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



タカヒロ

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

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

コメントを残す

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