_Items.Restrict(String) メソッド

定義

フィルターをコレクションに適用し、フィルターに Items 一致する元のすべての項目を含む新しいコレクションを返します。

public:
 Microsoft::Office::Interop::Outlook::Items ^ Restrict(System::String ^ Filter);
public Microsoft.Office.Interop.Outlook.Items Restrict (string Filter);
Public Function Restrict (Filter As String) As Items

パラメーター

Filter
String

適用するフィルター文字列式。 詳細については、 メソッドを Find(String) 参照してください。

戻り値

フィルターに一致する元の Items コレクションの項目を表す Items コレクション。

注釈

このメソッドは、 メソッドまたはFindNext()メソッドを使用してコレクション内のFind(String)特定の項目を反復処理する代わりに使用します。 アイテム数が少ない場合は、Find メソッドや FindNext メソッドの方が処理が速くなります。 Restrict メソッドは、アイテム数が多くなるほど大幅に処理が速くなります。特に、大きなコレクション内で少数のアイテムを検索する場合に高速になります。

: Find 句または Restrict 句の一部としてユーザー定義フィールドを使用している場合は、ユーザー定義フィールドがフォルダーに存在する必要があります。 それ以外の場合は、そのフィールドが不明であることを示すエラーがコードによって生成されます。 フォルダーを追加するには、[フィールドの選択] を表示して [新規] をクリックします。

このメソッドは、次のプロパティと共に使用することはできません (エラーが発生します)。

BodyCategoriesChildrenClassCompaniesCompanyLastFirstNoSpaceCompanyLastFirstSpaceOnlyContactNamesContactsConversationIndexDLNameEmail1EntryIDEmail2EntryIDEmail3EntryIDEntryIDHTMLBodyIsOnlineMeetingLastFirstAndSuffixLastFirstNoSpaceAutoResolvedWinnerBodyFormatInternetCodePagePermissionLastFirstNoSpaceCompanyLastFirstSpaceOnlyLastFirstSpaceOnlyCompanyLastFirstNoSpaceAndSuffixMemberCountNetMeetingAliasNetMeetingAutoStartNetMeetingOrganizerAliasNetMeetingServerNetMeetingTypeRecurrenceStateReplyRecipientsReceivedByEntryIDRecevedOnBehalfOfEntryIDResponseStateSavedSentSubmittedVotingOptionsDownloadStateIsConflictMeetingWorkspaceURL

Find メソッドおよび Restrict メソッドのためのフィルターの作成

フィルターの構文は、フィルターを適用するフィールドの種類によって異なります。

文字列 (テキスト フィールドの場合)

テキスト フィールドを検索するときは、アポストロフィ (') または二重引用符 ("")を使用して、フィルターの一部である値を区切ることができます。 たとえば、次の行はすべて、フィールドが String 型 (C#の文字列 ) の場合に正しく機能します。

sFilter = "[CompanyName] = 'Microsoft'"

sFilter = "[CompanyName] = ""Microsoft"""

sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)

Jet または DASL クエリでフィルターを指定するときに、フィルターに含める文字列の区切り文字として単一引用符のペアを使用しており、かつその文字列に別の単一引用符やアポストロフィが含まれている場合は、その単一引用符またはアポストロフィの前に、エスケープ文字として単一引用符を追加します。 文字列の区切り文字として二重引用符を使用している場合も、同様に処理します。 つまり、文字列に二重引用符が含まれている場合は、その二重引用符の前に、エスケープ文字として二重引用符を追加します。

たとえば、単語と等しい Subject プロパティをフィルター処理する DASL フィルター文字列では、フィルター文字列全体が二重引用符のペアで区切られ、埋め込み文字列は単一引用符のペアで区切ることはできません。 このフィルター文字列でエスケープする必要がある 3 つの文字があります。 のプロパティ参照の開始二重引用符と終了二重引用符、および単語の http://schemas.microsoft.com/mapi/proptag/0x0037001f値条件のアポストロフィはできません。 適切なエスケープ文字を適用すると、フィルター文字列を次のように表すことができます。

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can't'"

chr(34) 関数を使用して、エスケープ文字として使用される二重引用符 (ASCII 文字値は 34) を表すこともできます。 二重引用符のエスケープ文字の代わりに chr(34) を使用すると、最後の例を次のように表すことができます。

filter = "@SQL= " & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001f" _

& Chr(34) & " = " & "'

DASL クエリを ci_startswith 演算子または ci_phrasematch 演算子と共に使用する場合も、単一引用符と二重引用符をエスケープする必要があります。 たとえば、次のクエリは、メッセージの件名で can't の語句一致クエリを実行します。

filter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" _

& Chr(34) & " ci_phrasematch " & "'

もう 1 つの例は DASL フィルター文字列で、 Subject プロパティを正しい単語と等しくフィルター処理します。ここで、単語は二重引用符で囲まれています。 この場合、次に示すように、末尾の二重引用符をエスケープする必要があります。

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'right "stuff""'"

スペース、単一引用符、二重引用符、またはパーセント文字を含んでいる名前付きプロパティのプロパティ参照には、別のエスケープ規則のセットが適用されます。 詳細については、「名前空間によってプロパティを参照する」を参照してください。

Date

日付と時刻は、通常、日付の書式で格納されますが、Find メソッドおよび Restrict メソッドでは、この書式を文字列の表記に変換する必要があります。 Microsoft Outlook が必要とするとおりに日付が形式化されるようにするには、Format 関数を使用します。 次の例では、1999 年 1 月 15 日の午後 3 時 30 分より後に変更されたすべての連絡先を検索するフィルターを作成しています。

sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"

Boolean 演算子

TRUE/FALSE、YES/NO、ON/OFF などのブール型 (Boolean) の値は、文字列に変換せずに処理する必要があります。 たとえば、連絡先の履歴が有効になっているかどうかを確認するには、次のフィルターを使用します。

sFilter = "[ジャーナル] = True"

: ブール 型フィールドの区切り記号として引用符を使用する場合、空の文字列はフィールドが False の項目を検索し、空でない文字列はすべてフィールドが True の項目を検索します。

キーワード (または Categories)

[カテゴリ] フィールドは、複数の値を保持するように設計されたキーワード型です。 プログラムでアクセスするときには、Categories フィールドはテキスト フィールドのように動作し、文字列は完全一致する必要があります。 テキスト文字列内の値は、コンマとスペースで区切られています。 つまり、一般に複数の値が含まれているキーワード フィールドには Find メソッドと Restrict メソッドが使用できないということです。 たとえば、Business のカテゴリに 1 つの連絡先があり、Business と Social のカテゴリに 1 つの連絡先がある場合は、Business のカテゴリに含まれるすべてのアイテムを取得するために、Find メソッドと Restrict メソッドを簡単に使用することはできません。 その代わりに、フォルダー内のすべての連絡先をループ処理して、全体のキーワード フィールド内に文字列 "Business" が含まれているかどうかを Instr 関数でテストします。

: 可能な例外は、[カテゴリ] フィールドを 2 つ、または値の数が少ない場合です。 次に、OR 論理演算子で Find メソッドと Restrict メソッドを使用して、すべてのビジネス連絡先を取得できます。 たとえば、"Business" OR "Business, Personal" OR "Personal, Business" のようにします (擬似コード)。 Category の文字列は、大文字と小文字が区別されません。

整数

区切り記号として、引用符付きまたは引用符なしで Integer フィールドを検索できます。 次に示すのは、Outlook 2000 で作成した連絡先を取得するフィルターです。

sFilter = "[OutlookInternalVersion] = 92711"

sFilter = "[OutlookInternalVersion] = '92711'"

フィルターの一部として変数を使用する

Restrict メソッドの例で示したように、フィルターには変数の値を使用することもできます。 次の Microsoft Visual Basic コード サンプルは、フィルターの一部として変数を使用する構文を示しています。

sFullName = "Dan Wilson"

' この方法では、Chr(34) を使用して値を区切ります。

sFilter = "[FullName] = " & Chr(34) & sFullName & Chr(34)

' この方法では、二重引用符を使用して値を区切ります。

sFilter = "[FullName] = """ & sFullName & """

フィルターの一部として論理演算子を使用する

論理演算子は、AND、OR、および NOT が使用可能です。 複数の条件を指定できるように、 Restrict メソッドの句のバリエーションを次に示します。

OR: カテゴリが Business または Personal のすべての連絡先アイテムを返します。

sFilter = "[Categories] = 'Personal' or [Categories] = 'Business'"

AND: Microsoft で勤務している個人用連絡先をすべて取得します。

sFilter = "[Categories] = 'Personal' and [CompanyName] = 'Microsoft'"

NOT: Microsoft に勤務していない個人用連絡先をすべて取得します。

sFilter = "[Categories] = 'Personal' And Not([CompanyName] = 'Microsoft')"

追加情報

ユーザー定義フィールドで Find メソッドまたは Restrict メソッドを使用する場合は、フォルダー内でフィールドを定義する必要があります。それ以外の場合はエラーが発生します。 「含む」操作を実行する方法はありません。 たとえば、Subject フィールドに特定の語が含まれているアイテムを検索するために、Find または Restrict は使用できません。 代わりに、 メソッドを AdvancedSearch(String, Object, Object, Object) 使用することも、フォルダー内のすべての項目をループして InStr 関数を使用してフィールド内で検索を実行することもできます。 Restrict メソッドは、特定の範囲の文字で始まるアイテムの検索に使用できます。 たとえば、姓が文字 M で始まる連絡先のすべてを検索するには、次のフィルターを使用します。

sFilter = "[LastName] > 'LZZZ' と [LastName] < 'N'"

適用対象