クエリの抽出条件は、Access データベース内の特定のアイテムを絞り込むのに役立ちます。 アイテムがクエリ結果に表示されるのは、入力したすべての抽出条件と一致する場合です。
抽出条件を Access クエリに追加するには、クエリをデザイン ビューで開き、抽出条件を指定するフィールド (列) を特定します。 フィールドがデザイン グリッドに表示されない場合は、フィールドをダブルクリックしてデザイン グリッドに追加してから、フィールドの [抽出条件] 行に抽出条件を入力します。 この方法がよくわからない場合は、「クエリの概要」をご覧ください。
クエリ条件とは、Access でクエリ フィールドの値を比較して、それぞれの値が含まれるレコードを含めるかどうかを決定するための式です。 たとえば、= "兵庫県" という式を使用すると、クエリ内のテキスト フィールドの値と比較できます。 あるレコードのそのフィールド内の値が "兵庫県" であれば、クエリ結果にそのレコードが含まれます。
次に、抽出条件を初めて作成するにあたり、よく使われる抽出条件の例をいくつか示します。 例はデータ型別に分けられています。
この記事の内容
クエリ条件の概要
抽出条件は数式に似ており、フィールドの参照設定、演算子、定数で構成される文字列です。 クエリ条件は、Accessでは式とも呼ばれます。
次の表に、いくつかの抽出条件のサンプルとその機能を示します。
条件 |
説明 |
---|---|
>25 and <50 |
"価格" や "UnitsInStock" などの "数値型" フィールドに適用されます。 この抽出条件を適用すると、"価格" や "UnitsInStock" のフィールドに 25 より大きく 50 より小さい値が含まれるレコードのみが含まれます。 |
DateDiff ("yyyy", [生年月日], Date()) > 30 |
生年月日などの "日付/時刻型" フィールドに適用されます。 クエリ結果には、ある人の誕生日と今日の日付の間の年数が 30 を超えるレコードのみが含まれます。 |
Is Null |
フィールド値が null のレコードが表示されるフィールドの種類に適用できます。 |
ご覧のように、適用するフィールドのデータ型や特定の要件によって、抽出条件はそれぞれが大幅に異なって見える場合があります。 基本的な演算子と定数を使用する単純な抽出条件もあれば、 関数や特別な演算子を使用したり、フィールドの参照設定を含む複雑な抽出条件もあります。
このトピックでは、いくつかの汎用的な抽出条件をデータ型ごとに示します。 このトピックの例が特定のニーズに対応しない場合は、抽出条件を自分で記述することが必要な場合もあります。 そのためにはまず、フィールドやリテラルを参照する式のすべての関数、演算子、特殊文字、構文に精通しておく必要があります。
まず、抽出条件を追加する場所と方法を説明します。 クエリに抽出条件を追加するには、クエリをデザイン ビューで開く必要があります。 次に、抽出条件を指定するフィールドを特定します。 このフィールドがまだデザイン グリッドにない場合は、このフィールドをクエリ デザイン ウィンドウからフィールド グリッドにドラッグするか、ダブルクリックします (フィールドをダブルクリックすると、フィールド グリッドの次の空の列に自動的に追加されます)。 最後に、[抽出条件] 行に抽出条件を入力します。
[抽出条件] 行でさまざまなフィールドに指定する抽出条件は、AND 演算子を使用して組み合わせることができます。 つまり、"都道府県" フィールドと "生年月日" フィールドで指定した抽出条件は、次のように解釈されます。
都道府県 = "兵庫県" AND 生年月日 < DateAdd (" yyyy ", -40, Date())
1. "都道府県" フィールドと "生年月日" フィールドに抽出条件が含まれます。
2. "都道府県" フィールドの値が "兵庫県" であるレコードのみが、この抽出条件を満たします。
3. 40 才以上の人のレコードのみが、この抽出条件を満たします。
4. 両方の抽出条件を満たすレコードのみが、結果に含まれます。
これらの条件のうち、1 つだけを満たしたい場合はどうなるでしょうか。 つまり、代わりの抽出条件がある場合は、どのように入力すればよいでしょうか。
代わりの抽出条件があるか、2 つの独立した抽出条件があってその 1 つだけを満たせばよい場合は、デザイン グリッドの [抽出条件] と [または] の両方の行を使用します。
1. [抽出条件] 行で "都道府県" の抽出条件が指定されています。
2. [または] 行で "生年月日" の抽出条件が指定されています。
次のように、[抽出条件] 行と [または] 行が OR 演算子によって結合されています。
都道府県 = "兵庫県" OR 生年月日 < DateAdd("yyyy", -40, Date())
さらに別の代替条件を指定する必要がある場合は、[または] 行の下にある空の行を使います。
この例を引き続き使用する前に、次の点に注意します。
-
抽出条件が一時的なものであったり頻繁に変更されたりする場合は、クエリ条件を頻繁に変更する代わりにクエリ結果をフィルタリングできます。 フィルターは、クエリ デザインを変更せずにクエリ結果を変更する一時的な抽出条件です。 フィルターの詳細については、「フィルターを適用して、Access データベースのレコードを選択して表示する」の記事を参照してください。
-
抽出条件のフィールドは変更しないが、対象の値を頻繁に変更する場合は、パラメーター クエリを作成できます。 パラメーター クエリによってフィールド値の入力が求められ、それらの値を使用してクエリ条件が作成されます。 パラメーター クエリの詳細については、「クエリとレポートでパラメータを使用する」の記事を参照してください。
"テキスト型"、"メモ型"、"ハイパーリンク型" のフィールドの抽出条件
次の例は、連絡先情報が保存されているテーブルに基づくクエリの "国または地域" フィールドのものです。 抽出条件は、デザイン グリッドのフィールドの [抽出条件] 行で指定します。
既定では、"ハイパーリンク型" のフィールドに指定する条件は、フィールド値の表示テキスト部分に適用されます。 値の宛先 Uniform Resource Locator (URL) 部分の条件を指定するには、HyperlinkPart 式を使用します。 この式の構文は次のとおりです: HyperlinkPart([Table1].[Field1],1) = "http://www.microsoft.com/"。Table1 はハイパーリンク フィールドを含むテーブルの名前、Field1 はハイパーリンク フィールド、http://www.microsoft.com は一致する必要がある URL です。
対象のレコードの内容 |
使用する抽出条件 |
クエリ 結果 |
---|---|---|
値 (China など) に完全一致する |
"China" |
"国または地域" フィールドが China に設定されているレコードが返されます。 |
値 (Mexico など) に一致しない |
Not "Mexico" |
"国または地域" フィールドが Mexico 以外に設定されている国/地域のレコードが返されます。 |
指定した文字列 (U など) で始まる |
Like U* |
名前が "U" で始まるすべての国/地域 (UK、USA など) のレコードが返されます。 注: 式で使用される場合、アスタリスク (*) は文字の任意の文字列を表します。これはワイルドカード文字とも呼ばれます。 このような文字の一覧は、「Access ワイルドカード文字リファレンス」を参照してください。 |
指定した文字列 (U など) で始まらない |
Not Like U* |
名前が "U" 以外の文字で始まるすべての国/地域のレコードが返されます。 |
指定した文字列 (Korea など) を含む |
Like "*Korea*" |
文字列 "Korea" が含まれるすべての国/地域のレコードが返されます。 |
指定した文字列 (Korea など) が含まれない |
Not Like "*Korea*" |
文字列 "Korea" が含まれないすべての国/地域のレコードが返されます。 |
指定した文字列 ("ina" など) で終わる |
Like "*ina" |
名前の最後が "ina" であるすべての国/地域 (China や Argentina など) のレコードが返されます。 |
指定した文字列 ("ina" など) で終わらない |
Not Like "*ina" |
名前の最後が "ina" でないすべての国/地域 (China や Argentina 以外) のレコードが返されます。 |
Null 値を含む |
Is Null |
フィールドに値が含まれないレコードが返されます。 |
Null 値を含まない |
Is Not Null |
フィールドに値が含まれるレコードが返されます。 |
長さ 0 の文字列を含む |
"" (引用符のペア) |
フィールドの値が (null ではなく) 空白に設定されているレコードが返されます。 たとえば、別の部門に対する販売のレコードの "国または地域" フィールドには、空白の値が含まれる場合があります。 |
長さ 0 の文字列を含まない |
Not "" |
"国または地域" フィールドが空白の値ではないレコードが返されます。 |
Null 値または長さ 0 の文字列を含む |
"" Or Is Null |
フィールドに値がないか、またはフィールドが空白の値に設定されているレコードが返されます。 |
Null 値でも空白でもない |
Is Not Null And Not "" |
"国または地域" フィールドが空白の値でも null 値でもないレコードが返されます。 |
指定した値 (Mexico など) 以降の値を含む (アルファベット順) |
>= "Mexico" |
アルファベット順で Mexico 以降の、すべての国/地域のレコードが返されます。 |
指定した範囲内 (A ~ D など) に含まれる |
Like "[A-D]*" |
名前が "A" ~ "D" の文字で始まる国/地域のレコードが返されます。 |
2 つの値のうちのどちらか一方 (USA または UK など) に一致する |
"USA" Or "UK" |
USA と UK のレコードが返されます。 |
値リストのうちの 1 つの値を含む |
In("France", "China", "Germany", "Japan") |
リスト内で指定したすべての国/地域のレコードが返されます。 |
フィールド値の指定位置に指定文字を含む |
Right([国], 1) = "y" |
名前の最後の文字が "y" であるすべての国/地域のレコードが返されます。 |
長さ要件を満たす |
Len([国]) > 10 |
名前の文字数が 10 文字を超える国/地域のレコードが返されます。 |
指定パターンに一致する |
Like "Chi??" |
名前の文字数が 5 文字であり、かつ最初の 3 文字が "Chi" である国/地域 (China や Chile など) のレコードが返されます。 注: 文字 ? と _ は、式で使用されるときに、1 文字を表します。これはワイルドカード文字とも呼ばれます。 文字 _ は、文字 ? を使う同じ式やワイルドカード文字 * を使う式で使うことはできません。 % ワイルドカード文字を含んでいる式では、ワイルドカード文字 _ を使用することもできます。 |
"数値型"、"通貨型"、"オートナンバー型" のフィールドの抽出条件
次の例は、製品情報が保存されているテーブルに基づくクエリの "単価" フィールドのものです。 抽出条件は、クエリ デザイン グリッドのフィールドの [抽出条件] 行で指定します。
対象のレコードの内容 |
使用する抽出条件 |
クエリ結果 |
---|---|---|
値 (10000 など) に完全一致する |
100 |
製品の単価が $100 のレコードが返されます。 |
値 (100000 など) に一致しない |
Not 100000 |
製品の単価が $1000 でないレコードが返されます。 |
指定した値 (10000 など) より小さい値を含む |
< 100 <= 100 |
単価が $100 未満 (<100) のレコードが返されます。 2 番目の式 (<=100) では、単価が $100 以下のレコードが返されます。 |
指定した値よりも大きい値 (9999 など) を含む |
>99.99 >=99.99 |
単価が $99.99 (>99.99) を超えるレコードが返されます。 2 番目の式では、単価が $99.99 以上のレコードが返されます。 |
2 つの値のうちのどちらか一方 (2000 または 2500 など) を含む |
2000 or 2500 |
単価が $20 か $25 のレコードが返されます。 |
値が指定範囲内にある |
>49.99 および <99.99 -または- 50 から 100 の間 |
単価が $49.99 より大きく $99.99 より小さいレコードが返されます。 |
値が指定範囲外にある |
<5000 or >10000 |
単価が $50 ~ $100 の範囲外のレコードが返されます。 |
指定した複数の値のいずれかを含む |
In(2000, 2500, 3000) |
単価が $20、$25、$30 のいずれかであるレコードが返されます。 |
指定した数値で終わる値を含む |
Like "*499" |
単価の末尾に "4.99" が付くレコード ($4.99、$14.99、$24.99 など) が返されます。 注: 文字 * と % は、式で使用されるときに、複数の文字を表します。これはワイルドカード文字とも呼ばれます。 文字 % は、文字 * を使う同じ式やワイルドカード文字 ? を使う式で使うことはできません。 _ ワイルドカード文字を含んでいる式では、ワイルドカード文字 % を使用することもできます。 |
null 値が含まれる (または値が含まれない) |
Is Null |
"単価" フィールドに値が入力されていないレコードが返されます。 |
非 Null 値を含む |
Is Not Null |
"単価" フィールドに値が含まれているレコードが返されます。 |
"日付/時刻型" フィールドの抽出条件
次の例は、受注情報が保存されているテーブルに基づくクエリの "受注日" フィールドのものです。 抽出条件は、クエリ デザイン グリッドのフィールドの [抽出条件] 行で指定します。
次のレコードを含めるには |
使用する抽出条件 |
クエリ結果 |
---|---|---|
値 (2006/2/2 など) に完全一致する |
#2/2/2006# |
2006 年 2 月 2 日に実行されたトランザクションのレコードが返されます。 Access で日付の値とテキスト文字列を区別できるように、日付の値は必ず # の文字で囲んでください。 |
値 (2006/2/2 など) と一致しない |
Not #2006/2/2# |
2006 年 2 月 2 日以外の日に実行されたトランザクションのレコードが返されます。 |
特定の日付 (2006/2/2 など) より前の値を含む |
< #2006/2/2# |
2006 年 2 月 2 日より前に実行されたトランザクションのレコードが返されます。 2006 年 2 月 2 日以前に実行されたトランザクションを表示するには、< 演算子ではなく <= 演算子を使用します。 |
特定の日付 (2006/2/2 など) より後の値を含む |
> #2006/2/2# |
2006 年 2 月 2 日より後に実行されたトランザクションのレコードが返されます。 2006 年 2 月 2 日以降に実行されたトランザクションを表示するには、> 演算子ではなく >= 演算子を使用します。 |
日付範囲内の値を含む |
>#2006/2/2# and <#2006/2/4# |
2006 年 2 月 2 日と 2006 年 2 月 4 日の間に実行されたトランザクションのレコードが返されます。 Between 演算子を使用して、始めと終わりを含む値の範囲を抽出することもできます。 たとえば、Between #2006/2/2# and #2006/2/4# は、>=#2006/2/2# and <=#2006/2/4# と同じです。 |
範囲外の値を含む |
<#2006/2/2# or >#2006/2/4# |
2006 年 2 月 2 日より前か 2006 年 2 月 4 日より後に実行されたトランザクションのレコードが返されます。 |
2 つの値のうちの一方 (2006/2/2 または 2006/2/3 など) を含む |
#2006/2/2# or #2006/2/3# |
2006 年 2 月 2 日または 2006 年 2 月 3 日以外に実行されたトランザクションのレコードが返されます。 |
指定した複数の値のいずれかを含む |
In (#2006/2/1#, #2006/3/1#, #2006/4/1#) |
2006 年 2 月 1 日、2006 年 3 月 1 日、または 2006 年 4 月 1 日に実行されたトランザクションのレコードが返されます。 |
(年に関係なく) 特定の月 (12 月など) の日付を含む |
DatePart("m", [SalesDate]) = 12 |
(年に関係なく) 12 月に実行されたトランザクションのレコードが返されます。 |
(年に関係なく) 特定の四半期内 (第 1 四半期など) の日付を含む |
DatePart("q", [SalesDate]) = 1 |
(年に関係なく) 第 1 四半期に実行されたトランザクションのレコードが返されます。 |
今日の日付を含む |
Date() |
今日実行されたトランザクションのレコードが返されます。 今日の日付が 2006/2/2 の場合は、"受注日" フィールドが 2006 年 2 月 2 日に設定されているレコードが表示されます。 |
昨日の日付を含む |
Date()-1 |
今日より前に実行されたトランザクションのレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年 2 月 1 日のレコードが表示されます。 |
明日の日付を含む |
Date() + 1 |
明日に実行されるトランザクションのレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年 2 月 3 日のレコードが表示されます。 |
今週の日付を含む |
DatePart("ww", [SalesDate]) = DatePart("ww", Date()) and Year( [SalesDate]) = Year(Date()) |
今週中に実行されるトランザクションのレコードが返されます。 1 週間は、日曜日から始まり土曜日に終わります。 |
前の週の日付を含む |
Year([SalesDate])* 53 + DatePart("ww", [SalesDate]) = Year(Date())* 53 + DatePart("ww", Date()) - 1 |
先週に実行されたトランザクションのレコードが返されます。 1 週間は、日曜日から始まり土曜日に終わります。 |
翌週の日付を含む |
Year([SalesDate])* 53+DatePart("ww", [SalesDate]) = Year(Date())* 53+DatePart("ww", Date()) + 1 |
翌週に実行されるトランザクションのレコードが返されます。 1 週間は、日曜日から始まり土曜日に終わります。 |
過去 7 日間の日付を含む |
Between Date() and Date()-6 |
過去 7 日間に実行されたトランザクションのレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年 1 月 24 日~ 2006 年 2 月 2 日の期間のレコードが表示されます。 |
今月の日付を含む |
Year([SalesDate]) = Year(Now()) And Month([SalesDate]) = Month(Now()) |
今月のレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年 2 月のレコードが表示されます。 |
先月の日付を含む |
Year([SalesDate])* 12 + DatePart("m", [SalesDate]) = Year(Date())* 12 + DatePart("m", Date()) - 1 |
先月のレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年 1 月のレコードが表示されます。 |
翌月の日付を含む |
Year([SalesDate])* 12 + DatePart("m", [SalesDate]) = Year(Date())* 12 + DatePart("m", Date()) + 1 |
翌月のレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年 3 月のレコードが表示されます。 |
過去 30 日間または 31 日間の日付を含む |
Between Date( ) And DateAdd("M", -1, Date( )) |
1 か月分の販売レコード。 今日の日付が 2006/2/2 の場合は、2006 年 1 月 2 日 から 2006 年 2 月 2 日の期間のレコードが表示されます。 |
現在の四半期の日付を含む |
Year([SalesDate]) = Year(Now()) And DatePart("q", Date()) = DatePart("q", Now()) |
現在の四半期のレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年の第 1 四半期のレコードが表示されます。 |
前の四半期の日付を含む |
Year([SalesDate])*4+DatePart("q",[SalesDate]) = Year(Date())*4+DatePart("q",Date())- 1 |
前の四半期のレコードが返されます。 今日の日付が 2006/2/2 の場合は、2005 年の第 4 四半期のレコードが表示されます。 |
次の四半期の日付を含む |
Year([SalesDate])*4+DatePart("q",[SalesDate]) = Year(Date())*4+DatePart("q",Date())+1 |
次の四半期のレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年の第 2 四半期のレコードが表示されます。 |
今年の日付を含む |
Year([SalesDate]) = Year(Date()) |
今年のレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年のレコードが表示されます。 |
昨年の日付を含む |
Year([SalesDate]) = Year(Date()) - 1 |
昨年に実行されたトランザクションのレコードが返されます。 今日の日付が 2006/2/2 の場合は、2005 年のレコードが表示されます。 |
来年の日付が含まれる |
Year([SalesDate]) = Year(Date()) + 1 |
来年の日付のトランザクションのレコードが返されます。 今日の日付が 2006/2/2 の場合は、2007 年のレコードが表示されます。 |
1 月 1 日~今日までの日付を含む (年初から今日までのレコード) |
Year([SalesDate]) = Year(Date()) and Month([SalesDate]) <= Month(Date()) and Day([SalesDate]) <= Day (Date()) |
今年の 1 月 1 日から今日までの日付のトランザクションのレコードが返されます。 今日の日付が 2006/2/2 の場合は、2006 年 1 月 1 日~ 2006 年 2 月 2 日のレコードが表示されます。 |
過去の日付を含む |
< Date() |
今日より前に実行されたトランザクションのレコードが返されます。 |
未来の日付を含む |
> Date() |
今日より後に実行されるトランザクションのレコードが返されます。 |
null (または空) 値をフィルターで抽出する |
Is Null |
トランザクションの日付がないレコードが返されます。 |
非 null 値をフィルターで抽出する |
Is Not Null |
トランザクションの日付がわかっているレコードが返されます。 |
"はい/いいえ型" フィールドの抽出条件
一例として、顧客テーブルに、顧客のアカウントが現在アクティブかどうかを示す、"アクティブ" という名前の Yes/No フィールドがあるとします。 次の表は、Yes/No フィールドについて、[抽出条件] 行に入力された値がどのように評価されるかを示しています。
フィールド値 |
結果 |
---|---|
Yes、True、1、または -1 |
Yes 値が試される。 1 または -1 は、入力後に [抽出条件] 行で "True" に変換される。 |
No、False、または 0 |
No 値が試される。 0 は、入力後に [抽出条件] 行で "False" に変換される。 |
No 値 (null) |
試されない。 |
1、-1、0 以外の数値 |
それがフィールド内の唯一の抽出条件値の場合は結果なし。 |
Yes、No、True、False 以外の文字列 |
データ型不一致のエラーのため、クエリの実行は失敗する。 |
その他のフィールドの抽出条件
添付ファイル 添付ファイルを含んでいないレコードを含めるには、[抽出条件] 行に「Is Null」と入力します。 添付ファイルを含むレコードを含めるには、「Is Not Null」と入力します。
ルックアップ フィールド ルックアップ フィールドには、(外部キーを使って) 既存のデータ ソースの値を検索するものと、ルックアップ フィールドの作成時に指定した値のリストに基づくものの 2 種類があります。
指定した値のリストに基づくルックアップ フィールドのデータ型はテキストであり、有効な抽出条件は他のテキスト フィールドと同じです。
既存のデータソースの値に基づいてルックアップ フィールドで使用できる抽出条件は、検索対象データのデータ型ではなく、外部キーのデータ型によって決まります。 たとえば、"従業員名" が表示されているルックアップ フィールドがあるが、データ型が "数値型" の外部キーを使っているとします。 このフィールドにはテキストではなく数値が保存されるため、数値に使用できる抽出条件 (>2) を使用します。
外部キーのデータ型が不明の場合は、デザイン ビューでソース テーブルを調べて、フィールドのデータ型を特定できます。 次の操作を行います。
-
ナビゲーション ウィンドウでソース テーブルを見つけます。
-
次のいずれかの方法で、デザイン ビューでテーブルを開きます。
-
テーブルをクリックして Ctrl + Enter を押します。
-
テーブル名を右クリックし、[デザイン ビュー] をクリックします。
-
-
各フィールドのデータ型は、テーブル デザイン グリッドの [データ型] 列に表示されます。
複数値を持つフィールド 複数値を持つフィールドのデータは、非表示のテーブルの行として保存されます。 このテーブルは、フィールドを表すために Access で作成および設定されるものです。 クエリ デザイン ビューでは、このフィールドは展開可能フィールドを使って [フィールド リスト] に表示されます。 複数値を持つフィールドで抽出条件を使用するには、非表示のテーブルの 1 行の抽出条件を入力します。 次の操作を行います。
-
複数値を持つフィールドが含まれるクエリを作成して、デザイン ビューで開きます。
-
この隣のプラス記号 (+) をクリックして、複数値を持つフィールドを展開します。フィールドが既に展開されている場合は、マイナス記号 (-) になっています。 フィールドの名前のすぐ下に、複数値を持つフィールドの 1 つの値を表すフィールドが表示されます。 このフィールドは、文字列 .Value が追加された複数値を持つフィールドと同じ名前になります。
-
複数値を持つフィールドとその単一値フィールドを、デザイン グリッドの別の列にドラッグします。 複数値を持つフィールドの全体のみを結果に表示したい場合は、単一値フィールドの [表示] チェックボックスをオフにします。
-
値が示すデータ型に合った抽出条件を使用して、単一値フィールドの [抽出条件] 行に抽出条件を入力します。
-
複数値を持つフィールドの値は、入力する抽出条件を使ってそれぞれ個別に評価されます。 たとえば、数値リストが保存されている複数値を持つフィールドがあるとします。 「>5 AND <3」という抽出条件を入力すると、5 より大きい値と 3 より小さい値がそれぞれ 1 つ以上含まれるレコードが一致します。