Items.Restrict メソッド (Outlook)

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

構文

Restrict( _Filter_ )

expressionItems オブジェクトを返す式です。

パラメーター

名前 必須 / オプション データ型 説明
Filter 必須 String 適用するフィルター文字列式。 詳細については、「Find メソッド」 を参照 してください。

戻り値

フィルター 一致する元の Items コレクションのアイテムを表す Items コレクション。

注釈

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

注意

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

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

| Body| LastFirstNoSpaceCompany| |カテゴリ| LastFirstSpaceOnly| || LastFirstSpaceOnlyCompany| |クラス| LastFirstNoSpaceAndSuffix| |企業| MemberCount| |CompanyLastFirstNoSpace| **NetMeetingAlias| |**CompanyLastFirstSpaceOnly| NetMeetingAutoStart| |ContactNames| **NetMeetingOrganizerAlias| |**連絡先| NetMeetingServer| |ConversationIndex| NetMeetingType| |DLName| RecurrenceState| |Email1EntryID| ReceivedByEntryID| |Email2EntryID| ReceivedOnBehalfOfEntryID| |Email3EntryID| ReplyRecipients| |EntryID| ResponseState| |HTMLBody| **保存| |**IsOnlineMeeting| **送信| |**LastFirstAndSuffix| **送信| |**LastFirstNoSpace| **VotingOptions| |**AutoResolvedWinner| DownloadState| |BodyFormat| IsConflict| |InternetCodePage| MeetingWorkspaceURL| |アクセス許可||

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

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

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

テキスト フィールドにフィルターを適用する場合は、単一引用符 (') の組または二重引用符 (") の組のどちらかを使用して、フィルターに含まれる値を区切ることができます。 たとえば、フィールドが String 型の場合、次のすべての行が正しく機能 します

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

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

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

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) & " = " & "'can''t'"

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

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

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

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the 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 演算子

Boolean 演算子 (TRUE/ FALSE、YES/NO、ON/OFF など) は、文字列に変換してはいけません。 たとえば、連絡先のジャーナリングが有効かどうかを判断するには、次のフィルターを使用できます。

sFilter = "[Journal] = True" 

注意

ブール型 (Boolean) のフィールドの検索で区切り文字に引用符を使用した場合、空の文字列を指定すると False が格納されているフィールドのアイテムが検索されます。また、空ではない文字列、つまり任意の文字列を指定すると、True が格納されているフィールドのアイテムが検索されます。

キーワード (または Categories)

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

注意

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

整数

区切り記号を 使用するか 、引用符を付けずに整数フィールドを検索できます。 次のフィルターでは、Outlook 2000 を使用して作成された連絡先を検索します。

sFilter = "[OutlookInternalVersion] = 92711" sFilter = "[OutlookInternalVersion] = '92711'"

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

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

sFullName = "Dan Wilson"  
' This approach uses Chr(34) to delimit the value.  
sFilter = "[FullName] = " & Chr(34) & sFullName & Chr(34)  
' This approach uses double quotation marks to delimit the value. 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 メソッドを使用できます。また、フォルダー内のすべてのアイテムをループ処理し、InStr 関数を使用してフィールド内の検索を実行することもできます。 Restrict メソッド を使用 して、特定の文字範囲内で始まるアイテムを検索します。 たとえば、姓が文字 M で始まる連絡先のすべてを検索するには、次のフィルターを使用します。

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

このVisual Basic for Applications (VBA) の例では 、Restrict メソッドを使用して、ビジネス カテゴリのすべての受信トレイ アイテムを取得し、それらを Business フォルダーに 移動 します。 この例を実行するには、受信トレイに 'Business' という名前のフォルダーを作成するか、そのフォルダーが存在していることを確認します。

Sub MoveItems()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myFolder As Outlook.Folder  
    Dim myItems As Outlook.Items  
    Dim myRestrictItems As Outlook.Items  
    Dim myItem As Outlook.MailItem  
  
    Set myNamespace = Application.GetNamespace("MAPI")  
    Set myFolder = _  
        myNamespace.GetDefaultFolder(olFolderInbox)  
    Set myItems = myFolder.Items  
    Set myRestrictItems = myItems.Restrict("[Categories] = 'Business'")  
    For i =  myRestrictItems.Count To 1 Step -1  
        myRestrictItems(i).Move myFolder.Folders("Business")  
    Next  
End Sub

この例Visual Basic for Applications Restrict メソッドを使用して、アイテムの LastModificationTime プロパティに基づいてアイテムに問い合わせにフィルターを適用します。

Public Sub ContactDateCheck()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myContacts As Outlook.Items  
    Dim myItems As Outlook.Items  
    Dim myItem As Object  
      
    Set myNamespace = Application.GetNamespace("MAPI")  
    Set myContacts = myNamespace.GetDefaultFolder(olFolderContacts).Items  
    Set myItems = myContacts.Restrict("[LastModificationTime] > '01/1/2003'")  
    For Each myItem In myItems  
        If (myItem.Class = olContact) Then  
            MsgBox myItem.FullName & ": " & myItem.LastModificationTime  
        End If  
    Next  
End Sub

次に示す Visual Basic for Applications のコードは、上の例と同じ操作を実行するものです。ただし、このコードではフィルターの適用に変数が使用されています。

Public Sub ContactDateCheck2()  
    Dim myNamespace As Outlook.NameSpace  
    Dim myContacts As Outlook.Items  
    Dim myItem As Object  
    Dim DateStart As Date  
    Dim DateToCheck As String  
    Dim myRestrictItems As Outlook.Items  
  
    Set myNameSpace = Application.GetNamespace("MAPI")  
    Set myContacts = myNameSpace.GetDefaultFolder(olFolderContacts).Items  
    DateStart = #01/1/2003#  
    DateToCheck = "[LastModificationTime] >= """ & DateStart & """"  
    Set myRestrictItems = myContacts.Restrict(DateToCheck)  
    For Each myItem In myRestrictItems  
        If (myItem.Class = olContact) Then  
            MsgBox myItem.FullName & ": " & myItem.LastModificationTime  
        End If  
    Next  
End Sub

関連項目

Items オブジェクト

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。