文字列を比較してアイテムをフィルターにかける
このトピックでは、Microsoft Jet 構文および DAV Searching and Locating (DASL) 構文による文字列プロパティのフィルターのサポートについて説明します。
文字列の区切り文字とエスケープ文字の使用
文字列プロパティの比較を行う場合、フィルターの条件に含める文字列の区切り文字には、単一引用符 (') または二重引用符 (") のペアを使用できます。 たとえば、以下に示す行はすべて、プロパティが文字列型 ( String ) のときに正しく機能します。
sFilter = "[CompanyName] = 'Microsoft'"
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)
Jet または DASL クエリでフィルターを指定するときに、フィルターに含める文字列の区切り文字として単一引用符のペアを使用しており、かつその文字列に別の単一引用符やアポストロフィが含まれている場合は、その単一引用符またはアポストロフィの前に、エスケープ文字として単一引用符を追加します。 文字列の区切り文字として二重引用符を使用している場合も、同様に処理します。 つまり、文字列に二重引用符が含まれている場合は、その二重引用符の前に、エスケープ文字として二重引用符を追加します。
たとえば、 Subject プロパティをフィルター処理する DASL フィルター文字列では、単語 can't
と等しい場合、フィルター文字列全体が二重引用符のペアで区切られ、埋め込み文字列 can't
は一重引用符のペアで区切られます。 このフィルター文字列でエスケープする必要がある 3 つの文字があります。 のプロパティ参照の開始二重引用符と終了二重引用符、および単語 can't
のhttps://schemas.microsoft.com/mapi/proptag/0x0037001f
値条件のアポストロフィです。
適切なエスケープ文字を適用すると、フィルター文字列を次のように表すことができます。
filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"
または、 関数を chr(34)
使用して、エスケープ文字として使用される二重引用符 (ASCII 文字値が 34) を表すことができます。 エスケープ文字の二重引用符の代わりに chr(34)
を使用すると、前の例のフィルター文字列は次のようになります。
filter = "@SQL= " & Chr(34) & "https://schemas.microsoft.com/mapi/proptag/0x0037001f" _
& Chr(34) & " = " & "'can''t'"
DASL クエリを ci_startswith 演算子または ci_phrasematch 演算子と共に使用する場合も、単一引用符と二重引用符をエスケープする必要があります。 たとえば、次のクエリは、メッセージの件名で can't
の語句一致クエリを実行します。
filter = "@SQL=" & Chr(34) & "https://schemas.microsoft.com/mapi/proptag/0x0037001E" _
& Chr(34) & " ci_phrasematch " & "'can''t'"
もう 1 つの例は、 Subject プロパティを単語 the right stuff
と等しくするためにフィルター処理する DASL フィルター文字列です。ここで、単語 stuff
は二重引用符で囲まれます。 この場合、次に示すように、末尾の二重引用符をエスケープする必要があります。
filter = "@SQL=""https://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"
スペース、単一引用符、または二重引用符の各文字を含む名前付きプロパティへのプロパティ参照には、別のエスケープ規則が適用されます。 プロパティ参照にスペース、単一引用符、または二重引用符が含まれている場合は、プロパティ参照内で次に示す Universal Resource Locator (URL) のエスケープ文字を使用する必要があります。
プロパティ参照内の文字 | エスケープ文字 |
---|---|
スペース文字 | %20 |
二重引用符 | %22 |
単一引用符 | %27 |
たとえば、次のフィルターを使用して、 という単語pearls
を含む Mom の "Gift" という名前のカスタム プロパティを検索します。
filter = "@SQL=" & Chr(34) & _
"https://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/" _
& "Mom%27s%20%22Gift%22" & Chr(34) & " like '%pearls%'"
Jet 構文を使用した文字列比較
Jet フィルターでサポートされる文字列の比較は、等価一致に制限されます。 特定の文字列に相当する文字列プロパティの値に基づいて項目をフィルター処理できます。たとえば、 LastName プロパティが "Wilson" と等しい場合などです。 比較では大文字と小文字は区別されないことに注意してください。最後の例では、比較文字列として "Wilson" と "wilson" を指定すると、同じ結果が返されます。
DASL 構文を使用した文字列比較
DASL フィルターでサポートされる文字列比較には、等価一致、前方一致、語句一致、およびサブ文字列の一致があります。 Subject プロパティにフィルターを適用する場合は、"RE: " や "FW: " などの接頭辞は無視されます。 例えば。。。
sFilter = "[Subject] = 'cat'"
...は"cat" と "RE: cat" の両方と一致します。
等価一致
Jet フィルターと同様に、DASL フィルターでは、等値演算子 (=) を使用して文字列の等価比較を実行します。 文字列プロパティの値は、上記で説明した "RE: " や "FW: " のような接頭辞を除き、比較文字列と等しくなければなりません。
As an example, the following DASL query creates a filter for company name equals 'Microsoft':
criteria = "@SQL=" & Chr(34) _
& "urn:schemas-microsoft-com:office:office#Company" & Chr(34) _
& " = 'Microsoft'"
別の例として、以下の件名のアイテムが検索先のフォルダーに格納されているとします。
- Question
- Questionable
- Unquestionable
- RE: Question
- The big question
次の = 制限...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " = 'question'"
...は次の結果を返します。
- 質問
- RE: Question
先頭一致、語句一致、およびサブ文字列の一致
DASL は、 ci_startswith および ci_phrasematch というコンテンツ インデクサー キーワード、および like というキーワードによって、文字列プロパティに対する前方一致、語句一致、サブ文字列の一致をサポートしています。 ストアにインデックスが付けられている場合は、コンテンツ インデクサー キーワードを使用した検索の方が、 like を使用した検索よりも効率的です。 検索シナリオに部分文字列の一致 (サポートされていないコンテンツ インデクサー キーワード) が含まれている場合は、DASL クエリで like キーワード (keyword)を使用します。
DASL クエリには ci_startswith または ci_phrasematch 、および like を含めることができますが、いずれの場合も、文字列比較はサブ文字列の一致を調べるものとして実行されます。
ci_startswith
ci_startswithの構文は次のとおりです。...
<PropertySchemaName> ci_startswith <ComparisonString>
... ここで、PropertySchemaName は名前空間によって参照されるプロパティの有効な名前であり、 ComparisonString は比較に使用される文字列です。
ci_startswith は、先頭一致による検索を実行します。 比較文字列のトークン (文字、単語、または複数の単語) が、インデックス付きプロパティの文字列値に設定されたいずれかの単語の先頭の文字に一致するかどうかを調べます。 比較文字列に複数のトークンが含まれている場合、比較文字列内のすべてのトークンは、インデックス付きプロパティでプレフィックスが一致している必要があります。 例:
- 条件 "sea" は "search" に一致します。
- 条件 "sea" は "research" に一致しません。
- 条件 "sea" は "Subject: the deep blue sea" に一致します。
- 条件 "law order" は "law and order" または "law & order" に一致します。
- 条件 "law and order" は "I like the show Law and Order." に一致します。
- 条件 "law and order" は "above the law" に一致しません。
- 条件 "sea creatures" は "Nova special on sea creatures" に一致します。
- 条件 "sea creatures" は "sealife creatures" に一致します。
- 条件 "sea creatures" は "undersea creatures" に一致しません。
「等価一致」で示した例と同様に、以下の件名のアイテムが検索先のフォルダーに格納されているとします。
- Question
- Questionable
- Unquestionable
- RE: Question
- The big question
次の ci_startswith 制限...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " ci_startswith 'question'"
...は次の結果を返します。
- 質問
- Questionable
- RE: Question
- The big question
ci_phrasematch
ci_phrasematchの構文は次のとおりです。...
<PropertySchemaName> ci_phrasematch <ComparisonString>
... ここで、PropertySchemaName は名前空間によって参照されるプロパティの有効な名前であり、 ComparisonString は比較に使用される文字列です。
ci_phrasematch は、語句一致による検索を実行します。 比較文字列のトークン (文字、単語、または複数の単語) が、インデックス付きプロパティの文字列値の中の単語全体に一致するかどうかを調べます。 トークンは二重引用符またはかっこ () で囲みます。 比較文字列の各トークンは、単語のサブ文字列や先頭に一致するのではなく、語句一致する必要があります。 比較文字列に複数のトークンが含まれている場合、比較文字列内のすべてのトークンに語句が一致している必要があります。 Subject や Body のように複数の単語を含むプロパティでは、いずれかの単語に一致すればよく、それが先頭の単語でなくてもかまいません。 次に例を示します。
- 条件 "cat" は "cat"、"cat box"、および "black cat" に一致します。
- 条件 "cat" は "re: cat is out" に一致します。
- 条件 "cat" は "catalog" や "kittycat" に一致しません。
- 条件 "kitty cat" は "put the kitty cat out" に一致します。
- 条件 "kitty cat" は "great kitty catalog" に一致しません。
「等価一致」で示した例と同様に、以下の件名のアイテムが検索先のフォルダーに格納されているとします。
- Question
- Questionable
- Unquestionable
- RE: Question
- The big question
次の ci_phrasematch 制限...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " ci_phrasematch 'question'"
...は次の結果を返します。
- 質問
- RE: Question
- The big question
。
like は、先頭一致、サブ文字列の一致、または等価一致を実行します。 トークン (文字、単語、または複数の単語) には、次のように、実行する一致の種類に応じて % 文字を含めます。
プレフィックスの一致
like '<token>%'
たとえば、for..を制限します。
like 'cat%'
...は "cat" と "catalog" と一致します。
部分文字列の照合
like '%<token>%'
たとえば、for..を制限します。
like '%cat%'
...は "cat"、"catalog"、"kittycat"、"decathlon" と一致します。
等価一致
like '<token>'
たとえば、for..を制限します。
like 'cat'
...は "cat" と "RE: Cat" と一致します。
各トークンは、文字列プロパティに含まれている任意の単語の一部分に一致できます。 比較文字列に複数のトークンが含まれている場合は、すべてのトークンがプロパティのサブ文字列に一致する必要があります。 Subject や Body のように複数の単語を含むプロパティでは、いずれかの単語に一致すればよく、それが先頭の単語でなくてもかまいません。
「等価一致」で示した例と同様に、以下の件名のアイテムが検索先のフォルダーに格納されているとします。
- Question
- Questionable
- Unquestionable
- RE: Question
- The big question
次のような制限...
criteria = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " like '%question%'"
...は次の結果を返します。
- 質問
- Questionable
- Unquestionable
- RE: Question
- The big question
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。