Restrict メソッド (Outlook)Items.Restrict method (Outlook)

Items コレクションにフィルターを適用し、フィルターに一致する元のすべてのアイテムを含む新しいコレクションを返します。Applies a filter to the Items collection, returning a new collection containing all of the items from the original that match the filter.

構文Syntax

expression. Restrict( _Filter_ )

expressionItems オブジェクトを返す式です。expression An expression that returns a Items object.

パラメーターParameters

名前Name 必須 / オプションRequired/Optional データ型Data type 説明Description
FilterFilter 必須Required StringString 適用するフィルター文字列式。A filter string expression to be applied. 詳細については、 Find メソッドを参照してください。For details, see the Find method.

戻り値Return value

フィルターに一致する元のitemsコレクションのアイテムを表すitemsコレクション。An Items collection that represents the items from the original Items collection which match the filter.

解説Remarks

このメソッドは、コレクション内の特定のアイテムを反復処理するのには、 Find メソッドまたは**FindNext** メソッドを使用する代わりの方法です。This method is an alternative to using the Find method or FindNext method to iterate over specific items within a collection. アイテム数が少ない場合は、Find メソッドや FindNext メソッドの方が処理が速くなります。The Find or FindNext methods are faster than filtering if there are a small number of items. Restrict メソッドは、アイテム数が多くなるほど大幅に処理が速くなります。特に、大きなコレクション内で少数のアイテムを検索する場合に高速になります。The Restrict method is significantly faster if there is a large number of items in the collection, especially if only a few items in a large collection are expected to be found.

注意

Find 節または Restrict 節でユーザー設定フィールドを使用する場合は、そのフィールドが対象フォルダー内に存在する必要があります。If you are using user-defined fields as part of a Find or Restrict clause, the user-defined fields must exist in the folder. それ以外の場合は、そのフィールドが不明であることを示すエラーがコードによって生成されます。Otherwise the code will generate an error stating that the field is unknown. フォルダーを追加するには、[フィールドの選択] を表示して [新規] をクリックします。You can add a field to a folder by displaying the Field Chooser and clicking New.

このメソッドは、次のプロパティと共に使用することはできません (エラーが発生します)。This method cannot be used and will cause an error with the following properties:

| 本文| LastFirstNoSpaceCompany| |カテゴリ| Lastfirstspace のみ| || Lastfirstspace onlycompany| |クラス| Lastfirstnospace andsuffix| |企業| MemberCount| |会社のLastfirstnospace| Net会議エイリアス| |会社のLastfirstspace のみ| Net会議の自動開始| |Contactnames| Netアスオーガナイザー eralias| |連絡先| Net会議サーバー| |ConversationIndex| Net会議の種類| |Dlname| RecurrenceState| |Email1EntryID| ReceivedByEntryID| |Email2EntryID| ReceivedOnBehalfOfEntryID| |Email3EntryID| ReplyRecipients| |EntryID| Responsestate| |HTMLBody| 保存されました| |IsOnlineMeeting| 送信済み| |Lastファイヤスタンドサフィックス| 提出済み | |Lastfirstnospace| VotingOptions| |必要| Downloadstate| |BodyFormat| Isconflict| |Internetcodepage| MeetingWorkspaceURL| |アクセス許可||| Body| LastFirstNoSpaceCompany| | Categories| LastFirstSpaceOnly| | 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| | Permission||

Find メソッドおよび Restrict メソッドのためのフィルターの作成Creating Filters for the Find and Restrict Methods

フィルターの構文は、フィルターを適用するフィールドの種類によって異なります。The syntax for the filter varies depending on the type of field you are filtering on.

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

テキスト フィールドにフィルターを適用する場合は、単一引用符 (') の組または二重引用符 (") の組のどちらかを使用して、フィルターに含まれる値を区切ることができます。When filtering text fields, you can use either a pair of single quotes (') or a pair of double quotes ("), to delimit the values that are part of the filter. たとえば、次のすべての行は、フィールドが文字列型 ( String ) のときに正常に機能します。For example, all of the following lines function correctly when the field is of type String :

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

Jet または DASL クエリでフィルターを指定するときに、フィルターに含める文字列の区切り文字として単一引用符のペアを使用しており、かつその文字列に別の単一引用符やアポストロフィが含まれている場合は、その単一引用符またはアポストロフィの前に、エスケープ文字として単一引用符を追加します。In specifying a filter in a Jet or DASL query, if you use a pair of single quotes to delimit a string that is part of the filter, and the string contains another single quote or apostrophe, then add a single quote as an escape character before the single quote or apostrophe. 文字列の区切り文字として二重引用符を使用している場合も、同様に処理します。Use a similar approach if you use a pair of double quotes to delimit a string. つまり、文字列に二重引用符が含まれている場合は、その二重引用符の前に、エスケープ文字として二重引用符を追加します。If the string contains a double quote, then add a double quote as an escape character before the double quote.

たとえば、 Subjectプロパティが単語can'tと等しいことをフィルター処理する DASL フィルター文字列では、フィルター文字列全体が二重引用符のペアで区切られ、埋め込み文字列can'tは1つの引用符で区切られています。For example, in the DASL filter string that filters for the Subject property being equal to the word can't, the entire filter string is delimited by a pair of double quotes, and the embedded string can't is delimited by a pair of single quotes. このフィルター文字列では、最初の二重引用符、 http://schemas.microsoft.com/mapi/proptag/0x0037001f のプロパティ参照の最後の二重引用符、および単語 can't の値条件の単一引用符の 3 つの文字をエスケープする必要があります。There are three characters that you need to escape in this filter string: the starting double quote and the ending double quote for the property reference of http://schemas.microsoft.com/mapi/proptag/0x0037001f, and the apostrophe in the value condition for the word can't. 適切なエスケープ文字を適用すると、フィルター文字列を次のように表すことができます。Applying the appropriate escape characters, you can express the filter string as follows:

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

別の方法として、 chr(34) 関数を使用して、エスケープ文字として使用する二重引用符 (ASCII 文字コードは 34) を表すこともできます。Alternatively, you can use the chr(34) function to represent the double quote (whose ASCII character value is 34) that is used as an escape character. エスケープ文字の二重引用符の代わりに chr(34) を使用すると、前の例のフィルター文字列は次のようになります。Using the chr(34) substitution for a double-quote escape character, you can express the last example as follows:

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

DASL クエリを ci_startswith 演算子または ci_phrasematch 演算子と共に使用する場合も、単一引用符と二重引用符をエスケープする必要があります。Escaping single and double quote characters is also required for DASL queries with the ci_startswith or ci_phrasematch operators. たとえば、次のクエリは、メッセージの件名で can't の語句一致クエリを実行します。For example, the following query performs a phrase match query for can't in the message subject:

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

次に、 Subject プロパティが the right stuff という文字列と一致し、さらにこの中の stuff という語が二重引用符で囲まれているものを検出する DASL フィルターの例を示します。Another example is a DASL filter string that filters for the Subject property being equal to the words the right stuff, where the word stuff is enclosed by double quotes. この場合、次に示すように、末尾の二重引用符をエスケープする必要があります。In this case, you must escape the enclosing double quotes as follows:

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

スペース、単一引用符、二重引用符、またはパーセント文字を含んでいる名前付きプロパティのプロパティ参照には、別のエスケープ規則のセットが適用されます。A different set of escaping rules apply to a property reference for named properties that contain the space, single quote, double quote, or percent character. 詳細については、「名前空間によってプロパティを参照する」を参照してください。For more information, see Referencing Properties by Namespace.

日付Date

通常、日付と時刻は日付形式で格納されますが、 FindメソッドおよびRestrictメソッドでは、日付と時刻を文字列表現に変換する必要があります。Although dates and times are typically stored with a Date format, the Find and Restrict methods require that the date and time be converted to a string representation. Microsoft Outlook が必要とするとおりに日付が形式化されるようにするには、Format 関数を使用します。To make sure that the date is formatted as Microsoft Outlook expects, use the Format function. 次の例では、1999 年 1 月 15 日の午後 3 時 30 分より後に変更されたすべての連絡先を検索するフィルターを作成しています。The following example creates a filter to find all contacts that have been modified after January 15, 1999 at 3:30 P.M.

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

Boolean 演算子Boolean Operators

Boolean 演算子 (TRUE/ FALSE、YES/NO、ON/OFF など) は、文字列に変換してはいけません。Boolean operators, TRUE/ FALSE, YES/NO, ON/OFF, and so on, should not be converted to a string. たとえば、連絡先のジャーナリングが有効かどうかを判断するには、次のフィルターを使用できます。For example, to determine whether journaling is enabled for contacts, you can use this filter:

sFilter = "[Journal] = True" 

注意

ブール型 (Boolean) のフィールドの検索で区切り文字に引用符を使用した場合、空の文字列を指定すると False が格納されているフィールドのアイテムが検索されます。また、空ではない文字列、つまり任意の文字列を指定すると、True が格納されているフィールドのアイテムが検索されます。If you use quotation marks as delimiters with Boolean fields, then an empty string will find items whose fields are False and all non-empty strings will find items whose fields are True.

キーワード (または Categories)Keywords (or Categories)

"分類項目" フィールドはキーワードとして使用され、複数の値を格納できます。The Categories field is of type keywords, which is designed to hold multiple values. プログラムを通じて "分類項目" フィールドにアクセスする場合は、このフィールドがテキスト フィールドと同じように扱われ、文字列が正確に一致する必要があります。When accessing it programmatically, the Categories field behaves like a Text field, and the string must match exactly. テキスト文字列内の値は、コンマとスペースで区切られています。Values in the text string are separated by a comma and a space. つまり、一般に複数の値が含まれているキーワード フィールドには Find メソッドと Restrict メソッドが使用できないということです。This typically means that you cannot use the Find and Restrict methods on a keywords field if it contains more than one value. たとえば、Business のカテゴリに 1 つの連絡先があり、Business と Social のカテゴリに 1 つの連絡先がある場合は、Business のカテゴリに含まれるすべてのアイテムを取得するために、Find メソッドと Restrict メソッドを簡単に使用することはできません。For example, if you have one contact in the Business category and one contact in the Business and Social categories, you cannot easily use the Find and Restrict methods to retrieve all items that are in the Business category. その代わりに、フォルダー内のすべての連絡先をループ処理して、全体のキーワード フィールド内に文字列 "Business" が含まれているかどうかを Instr 関数でテストします。Instead, you can loop through all contacts in the folder and use the Instr function to test whether the string "Business" is contained within the entire keywords field.

注意

考えられる例外は、Categories フィールドを2に制限するか、値の数を少なくする場合です。A possible exception is if you limit the Categories field to two, or a low number of values. その後、OR の論理演算子を使用してFindメソッドおよびRestrictメソッドを使用すると、すべてのビジネス用連絡先を取得できます。Then you can use the Find and Restrict methods with the OR logical operator to retrieve all Business contacts. たとえば、"Business" OR "Business, Personal" OR "Personal, Business" のようにします (擬似コード)。For example (in pseudocode): "Business" OR "Business, Personal" OR "Personal, Business." カテゴリ文字列の大文字と小文字は区別されません。Category strings are not case-sensitive.

整数Integer

整数型 ( Integer ) のフィールドを検索するには、区切り文字として引用符は使用しません。You can search for Integer fields with, or without quotation marks as delimiters. 次のフィルターでは、Outlook 2000 を使用して作成された連絡先を検索します。The following filters will find contacts that were created by using Outlook 2000:

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

フィルターの一部として変数を使用するUsing Variables as Part of the Filter

Restrict メソッドの例で示したように、フィルターには変数の値を使用することもできます。As the Restrict method example illustrates, you can use values from variables as part of the filter. 次に示す Microsoft Visual Basic Scripting Edition (VBScript) コードの例では、フィルターの一部として変数を使用する構文について説明しています。The following Microsoft Visual Basic Scripting Edition (VBScript) code sample illustrates syntax that uses variables as part of the filter.

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 & """"

フィルターの一部として論理演算子を使用するUsing Logical Operators as Part of the Filter

論理演算子は、AND、OR、および NOT が使用可能です。Logical operators that are allowed are AND, OR, and NOT. 次に、複数の条件を指定できるように、 Restrictメソッドの句のバリエーションを示します。The following are variations of the clause for the Restrict method so you can specify multiple criteria.

OR: カテゴリが Business または Personal のすべての連絡先アイテムを返します。OR: The following code returns all contact items that have either Business or Personal as their category.

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

AND: Microsoft で勤務している個人用連絡先をすべて取得します。AND: The following code retrieves all personal contacts who work at Microsoft.

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

NOT: Microsoft に勤務していない個人用連絡先をすべて取得します。NOT: The following code retrieves all personal contacts who don't work at Microsoft.

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

追加情報Additional Notes

ユーザー定義フィールドでFindメソッドまたはRestrictメソッドを使用しようとしている場合は、そのフィールドがフォルダー内に定義されている必要があります。それ以外の場合は、エラーが発生します。If you are trying to use the Find or Restrict methods with user-defined fields, the fields must be defined in the folder, otherwise an error will occur. 「含む」操作を実行する方法はありません。There is no way to perform a "contains" operation. たとえば、Subject フィールドに特定の語が含まれているアイテムを検索するために、Find または Restrict は使用できません。For example, you cannot use Find or Restrict to search for items that have a particular word in the Subject field. その代わりに、AdvancedSearch メソッドを使用できます。また、フォルダー内のすべてのアイテムをループ処理し、InStr 関数を使用してフィールド内の検索を実行することもできます。Instead, you can use the AdvancedSearch method, or you can loop through all of the items in the folder and use the InStr function to perform a search within a field. Restrict メソッドは、特定の範囲の文字で始まるアイテムの検索に使用できます。You can use the Restrict method to search for items that begin within a certain range of characters. たとえば、姓が文字 M で始まる連絡先のすべてを検索するには、次のフィルターを使用します。For example, to search for all contacts with a last name beginning with the letter M, use this filter:

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

Example

この Visual Basic for Applications (VBA) の例では、 Restrictメソッドを使用して、ビジネスカテゴリのすべての受信トレイアイテムを取得し、それをビジネスフォルダーに移動します。This Visual Basic for Applications (VBA) example uses the Restrict method to get all Inbox items of Business category and moves them to the Business folder. この例を実行するには、受信トレイに 'Business' という名前のフォルダーを作成するか、そのフォルダーが存在していることを確認します。To run this example, create or make sure a subfolder called 'Business' exists under Inbox.

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** プロパティに基づいて連絡先アイテムにフィルターを適用します。This Visual Basic for Applications example uses the Restrict method to apply a filter to contact items based on the item's LastModificationTime property.

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 のコードは、上の例と同じ操作を実行するものです。ただし、このコードではフィルターの適用に変数が使用されています。The following Visual Basic for Applications example is the same as the example above, except that it demonstrates the use of a variable in the filter.

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

関連項目See also

Items オブジェクトItems 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.