【Outlook VBA】Outlook連絡先をVBAのFindメソッドで検索してみよう

今回はOutlook連絡先の「部署」項目を対象にVBAのFindメソッドとFindNextメソッドを使用して検索を行ってみたいと思います。


Outlook連絡先の管理は意外と面倒

Outlook連絡先が古い情報のままとなっている場合って多くないでしょうか。

Outlook連絡先を丁寧に管理していけばいくほど対象者の人事異動や組織改組によって情報を更新しなければならず、管理はかなり面倒になっていきますので、そうなっていくのは致し方ないことだと思います。

今回はそんなときに連絡先の確認と更新がぐっと楽にできる方法をOutlookのVBAを利用して実現してみたいと思います。


FindとFindNextメソッドについて

今回利用するメソッドはFindとFindNextとなります。
Findメソッドは検索した一つの結果を返します。FindNextメソッドは検索結果が複数ある場合に次の検索結果を返します。FindとFindNext両方とも検索結果が該当なしである場合はNothingを返します。

「Find」メソッドの構文は以下の通りです。

Object(コレクション).Find("[項目] = '値'")

項目は今回「部署」を対象としているので、項目に「Department」を指定しています。
そのほかの項目は以下の通りです。ほかにもありますので、詳細はこちらを参考にしてください。

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

次にFindNextですが、上記の通りFindメソッドで検索した次の結果を返してくれるメソッドです。

「FindNext」メソッドの構文は以下の通りです。

Object(コレクション).FindNext

はい、これだけです。

Findメソッドの検索結果を引き継いでくれますので、改めて指定する必要はありません。なお、FindNextメソッド単体だけでは機能しませんので気を付けてください。



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

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

Outlook VBAをはじめよう!

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

マクロを登録する

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

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

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

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

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 CountNum As Long
    
    SearchKey = "人事"
    
    CountNum = 0

    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの連絡先一覧を取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderContacts)
    Set olConItems = olFolder.Items
            

    '連絡先のメールアドレスをキーにして連絡先を検索
    Set olItem = olConItems.Find("[Department]='" & SearchKey & "'")
    While TypeName(olItem) = "ContactItem"
        CountNum = CountNum + 1
        Debug.Print olItem.FullName & ":" & olItem.Department & ":" & CountNum & "件"
        Set olItem = olConItems.FindNext
    Wend
    Debug.Print SearchKey & "の検索結果は合計" & CountNum & "件"

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

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

検索をしてみる

検索キーワードを確認します。今回は「人事総務部」となります。

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

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

リストと比較してみましょう。

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

次に「広報戦略部」で検索してみます。

はい、検索結果は2件でリストと同じですね。

今度は「人事」だけで検索してみます。

結果は0件です。「人事総務部」が引っ掛かりそうですが、FindとFindNextメソッドは完全一致しか結果を返さないということになりますね。



さいごに

いかがでしょうか。

次回は一括更新方法について説明をしたいと思います。

【Outlook VBA】Outlook連絡先をVBAのSavaメソッドで一括更新してみよう

コメントを残す

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