Items.Restrict メソッド (Outlook)

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

構文

Restrict( _Filter_ )

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

パラメーター

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

戻り値

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

注釈

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

注:

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

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

Body LastFirstNoSpaceCompany
Children LastFirstSpaceOnlyCompany
Class LastFirstNoSpaceAndSuffix
Companies MemberCount
CompanyLastFirstNoSpace NetMeetingAlias
CompanyLastFirstSpaceOnly NetMeetingAutoStart
ContactNames NetMeetingOrganizerAlias
Contacts NetMeetingServer
ConversationIndex NetMeetingType
DLName RecurrenceState
Email1EntryID ReceivedByEntryID
Email2EntryID ReceivedOnBehalfOfEntryID
Email3EntryID ReplyRecipients
EntryID ResponseState
HTMLBody Saved
IsOnlineMeeting Sent
LastFirstAndSuffix Submitted
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 プロパティをフィルター処理する DASL フィルター文字列では、単語 can'tと等しい場合、フィルター文字列全体が二重引用符のペアで区切られ、埋め込み文字列 can't は一重引用符のペアで区切られます。 このフィルター文字列でエスケープする必要がある 3 つの文字があります。 のプロパティ参照の開始二重引用符と終了二重引用符、および単語 can'thttp://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) & " = " & "'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と等しくするためにフィルター処理する DASL フィルター文字列です。ここで、単語 stuff は二重引用符で囲まれます。 この場合、次に示すように、末尾の二重引用符をエスケープする必要があります。

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

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

日付

日付と時刻は通常、 日付 形式で格納されますが、 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, Personal" OR "Personal, Business" などです。カテゴリ文字列では大文字と小文字は区別されません。

整数

区切り記号として、引用符付きまたは引用符なしで Integer フィールドを検索できます。 次のフィルターでは、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 フォルダーに移動します。 この例を実行するには、受信トレイに '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 のサポートおよびフィードバックを参照してください。