Application Advanced 検索メソッド (Outlook)Application.AdvancedSearch method (Outlook)

指定された DAV Searching and Locating (DASL) 検索文字列に基づいて検索を実行します。Performs a search based on a specified DAV Searching and Locating (DASL) search string.

構文Syntax

expression.expression. AdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )AdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )

expression**Application** オブジェクトを 表す変数。expression A variable that represents an Application object.

パラメーターParameters

名前Name 必須 / オプションRequired/Optional データ型Data type 説明Description
ScopeScope 必須Required StringString 検索範囲を指定します。The scope of the search. たとえば、フォルダー パスなどを指定します。For example, the folder path of a folder. フォルダー パスは単一引用符で囲むことをお勧めします。It is recommended that the folder path is enclosed within single quotes. 単一引用符で囲まなかった場合、フォルダー パスに Unicode の文字が含まれていると、正しい結果を取得できないことがあります。Otherwise, the search might not return correct results if the folder path contains special characters including Unicode characters. 複数のフォルダー パスを指定するには、各フォルダー パスを単一引用符で囲み、コンマで区切ります。To specify multiple folder paths, enclose each folder path in single quotes and separate the single quoted folder paths with a comma.
FilterFilter 省略可能Optional VariantVariant 検索のパラメーターを定義する DASL 検索フィルターを指定します。The DASL search filter that defines the parameters of the search.
SearchSubFoldersSearchSubFolders 省略可能Optional VariantVariant フォルダー内のサブフォルダーを検索するかどうかを指定します。Determines if the search will include any of the folder's subfolders.
TagTag 省略可能Optional VariantVariant 検索の識別子として指定する名前です。The name given as an identifier for the search.

戻り値Return value

検索の結果を表す**search** オブジェクト。A Search object that represents the results of the search.

注釈Remarks

連続するコード行で AdvancedSearch メソッドを呼び出し、複数の検索を同時に実行することもできます。You can run multiple searches simultaneously by calling the AdvancedSearch method in successive lines of code. ただし、多数の検索フォルダーをプログラム上で作成すると、検索処理が同時に多数行われるため、特にオンライン Exchange モードで検索を実行する場合などは、Outlook のパフォーマンスが影響を受けます。However, you should be aware that programmatically creating a large number of search folders can result in significant simultaneous search activity that would affect the performance of Outlook, especially if Outlook conducts the search in online Exchange mode.

AdvancedSearch メソッド、および Outlook オブジェクト モデルに含まれるその関連機能では、Outlook のユーザー インターフェイスに表示される検索フォルダーは作成されません。The AdvancedSearch method and related features in the Outlook object model do not create a Search Folder that will appear in the Outlook user interface. ただし、返された Search オブジェクトの ****Save**** メソッドを使用すると、Outlook のユーザー インターフェイスの検索フォルダーの一覧に表示される検索フォルダーを作成することができます。However, you can use the Save method of the Search object that is returned to create a Search Folder that will appear in the Search Folders list in the Outlook user interface.

Scope パラメーターを使用して、同じストアに 1 つ以上のフォルダーを指定することができますが、複数のストアに複数のフォルダーを指定することはできません。Using the Scope parameter, you can specify one or more folders in the same store, but you may not specify multiple folders in multiple stores. Scope パラメーターで同じストアに複数のフォルダーを指定するには、各フォルダーのパスの間にコンマ文字を使用し、各フォルダーのパスを単一引用符で囲みます。To specify multiple folders in the same store for the Scope parameter, use a comma character between each folder path and enclose each folder path in single quotes. 受信トレイや送信済みアイテムなどの既定のフォルダーでは、完全なフォルダー パスではなく、単純なフォルダー名を使用できます。For default folders such as Inbox or Sent Items, you can use the simple folder name instead of the full folder path. たとえば、次の 2 行のコードは、有効な Scope のパラメーターを表します。For example, the following two lines of code represent valid Scope parameters:

Scope = "'Inbox', 'Sent Items'"
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"

Filter パラメーターには、有効な DASL クエリを指定できます。The Filter parameter can be any valid DASL query. DASL クエリの詳細については、「 アイテムをフィルターにかける」、および「 名前空間でプロパティを参照する」を参照してください。For additional information on DASL queries, see Filtering Items and Referencing Properties by Namespace. 高度な検索の Filter パラメーターに JET クエリを使用することはできません。Note that you cannot use a JET query for the Filter parameter of Advanced Search. Scope パラメーターで指定されたフォルダーが含まれるストアでクイック検索が有効になっている場合は、クイック検索キーワードを使用して検索のパフォーマンスを向上させることができます。If Instant Search is enabled on a store that contains a folder specified in the Scope parameter, you can use Instant Search keywords to improve the performance of your search. クイック検索が無効なときにクイック検索キーワードを使用すると、Outlook はエラーを返し、検索は失敗します。If you use Instant Search keywords and Instant Search is not enabled, Outlook will return an error and your search will fail.

Example

次の Visual Basic for Applications (VBA) の例は、受信トレイ内で件名が [等しい] のアイテムを_検索し、_ 検索によって返される電子メールアイテムの送信者の名前を表示します。The following Visual Basic for Applications (VBA) example searches the Inbox for items with subject equal to Test and displays the names of the senders of the email items returned by the search. Advanced searchcomplete イベントプロシージャは、検索がblnSearchComp完了したときに、ブール型 (boolean) の値をTrueに設定します。The AdvancedSearchComplete event procedure sets the boolean blnSearchComp to True when the search is complete. このブール型の変数は、 TestAdvancedSearchComplete()検索が完了したことを確認するためにプロシージャで使用されます。This boolean variable is used by the TestAdvancedSearchComplete() procedure to determine when the search is complete. サンプルコードはThisOutlookSession、などのクラスモジュールに配置する必要があり、 TestAdvancedSearchComplete() Outlook によってイベントプロシージャを呼び出すことができるようにするには、プロシージャを呼び出す必要があります。The sample code must be placed in a class module such as ThisOutlookSession, and the TestAdvancedSearchComplete() procedure must be called before the event procedure can be called by Outlook.

Public blnSearchComp As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    Debug.Print "The AdvancedSearchComplete Event fired"  
    If SearchObject.Tag = "Test" Then  
        m_SearchComplete = True  
    End If  
  
End Sub  
  
Sub TestAdvancedSearchComplete()  
    Dim sch As Outlook.Search  
    Dim rsts As Outlook.Results  
    Dim i As Integer  
    blnSearchComp = False  
    Const strF As String = "urn:schemas:mailheader:subject = 'Test'"  
    Const strS As String = "Inbox"     
    Set sch = Application.AdvancedSearch(strS, strF, "Test")   
    While blnSearchComp = False  
        DoEvents  
    Wend   
    Set rsts = sch.Results  
    For i = 1 To rsts.Count  
        Debug.Print rsts.Item(i).SenderName  
    Next  
End Sub

次の Microsoft Visual Basic for Applications の例は、 AdvancedSearch メソッドを使用して新しい検索を作成します。The following Microsoft Visual Basic for Applications example uses the AdvancedSearch method to create a new search. 検索のパラメーターは、 Advanced searchメソッドの_Filter_引数で指定されたもので、[受信トレイ] フォルダーと [送信済みアイテム] フォルダー内のすべてのアイテムを返します。このフォルダーには、件名が "Office" と一致するか、または "Office" が含まれています。The parameters of the search, as specified by the Filter argument of the AdvancedSearch method, will return all items in the Inbox and Sent Items folders where the Subject phrase-matches or contains "Office". 検索の範囲にはユーザーの受信トレイ フォルダーと送信済みアイテム フォルダーが指定されており、 SearchSubFolders プロパティは True に設定されています。The user's Inbox and Sent Items folders are specified as the scope of the search and the SearchSubFolders property is set to True. 検索が終了すると、検索結果を効率的に列挙するために、 Search オブジェクトに対して GetTable メソッドが呼び出されます。When the search is complete, the GetTable method is called on the Search object for performant enumeration of search results.

Public m_SearchComplete As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    If SearchObject.Tag = "MySearch" Then  
        m_SearchComplete = True  
    End If  
End Sub  
  
Sub TestSearchForMultipleFolders()  
    Dim Scope As String  
    Dim Filter As String  
    Dim MySearch As Outlook.Search  
    Dim MyTable As Outlook.Table  
    Dim nextRow As Outlook.Row  
    m_SearchComplete = False  
    'Establish scope for multiple folders  
    Scope = "'" & Application.Session.GetDefaultFolder( _  
    olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder( _  
    olFolderSentMail).FolderPath & "'"  
    'Establish filter  
    If Application.Session.DefaultStore.IsInstantSearchEnabled Then  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " ci_phrasematch 'Office'"  
    Else  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " like '%Office%'"  
    End If  
    Set MySearch = Application.AdvancedSearch( _  
    Scope, Filter, True, "MySearch")  
    While m_SearchComplete <> True  
        DoEvents  
    Wend  
    Set MyTable = MySearch.GetTable  
    Do Until MyTable.EndOfTable  
        Set nextRow = MyTable.GetNextRow()  
        Debug.Print nextRow("Subject")  
    Loop  
End Sub

関連項目See also

Application オブジェクトApplication Object

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.