パラメータクエリによるデータの抽出

 前の節ではさまざまなデータ型やAnd、Or条件に対応したデータの抽出の例を見てきましたが、いずれも条件となる値を("東京都"とか#2016/12/31#といったように)直接指定するというものでした。
 しかし実際には、クエリを開くたびに抽出条件となる値を指定したい、という場合があります。その都度デザインビューで値を指定すればいいのですが、操作が面倒になったり、(他者に操作させる場合に)設定を誤ってしまうなどの心配があります。
 そこで、抽出条件となる値を未確定にしておき、クエリを開くたびに簡易なウインドウで値を指定させるという方法があります。これをパラメータクエリといいます。

f:id:accs2014:20170731143404p:plain:right:w400

 以下では例としてこのようなテーブルを用いるものとします。


テキスト型の列での設定例

f:id:accs2014:20170731143400p:plain:right:w400

 クエリのデザインビューです。
 ここで抽出条件に「[職業を指定]」と入力します。通常であれば「"戦士"」とか「"僧侶"」といったように直接値を指定しますが、このように[]で適当な名前を囲むだけでパラメータクエリの設定は完了です。
 なお、[]内の名前は既存の列名と重複しないようにしてください。


f:id:accs2014:20170731143354p:plain:right:w400

 このクエリをデータシートビューで開こうとすると検索値を入力させるためのウインドウが現れます。
 ここではじめて具体的に検索値を設定します。ここでは「戦士」と入力してみます。ダブルクォーテーション(")は必要ありません。


f:id:accs2014:20170731143352p:plain:right:w400

 するとその検索値に基づいてクエリが実行されます。


f:id:accs2014:20170731153826p:plain:right:w400

 さて、豆知識ですが、ウインドウに値を何も入力しないとデータは何も抽出されません。
 そこで、何も入力しない場合にすべてのレコードを抽出するようにするには、抽出条件欄に次のように入力すればOKです。

Like Nz([職業を指定],"*")


日付型の列での設定例

f:id:accs2014:20170731143458p:plain:right:w400

 次に抽出条件として日付を指定してみます。
 同じくクエリのデザインビューで「誕生日」列の抽出条件欄に次のように入力します。

>=[誕生日いつから] And <=[誕生日いつまで]

 これにより、クエリを開くたびに一定の期間を指定し、誕生日がその期間内である者を抽出することができます。

f:id:accs2014:20170731143454p:plain:right:w400

 データシートビューで開こうとすると、ウインドウが2回出てきますので、それぞれ期間の初日と終日を指定します。
 日付を指定する際もナンバーサイン(#)で囲む必要はありません。


f:id:accs2014:20170731143449p:plain:right:w400

 1998/1/1から2000/12/31の期間をしたときのデータシートビューです。


f:id:accs2014:20170731143440p:plain:right:w400

 なお、値を入力しないときにすべての日付を抽出対象とするには、次のように設定すればOKです。
 入力がないときは極端に古い(未来の)日付に置き換える、というわけです。

>=Nz([誕生日いつから],#1900/01/01#) And <=Nz([誕生年いつまで],#2999/12/31#)


演算フィールドでの設定例

f:id:accs2014:20170731143444p:plain:right:w400

 さて、パラメータクエリは演算フィールドに対しても適用できます。
 この例では「誕生日」列に基づく演算フィールド「誕生年」を作成し、それに対しパラメータクエリを設定しています。
 これにより西暦だけを指定してデータを抽出することができます。



複数の列に対する設定例(And,Or条件)

f:id:accs2014:20170731160426p:plain:right:w400

 最後になりますがパラメータクエリは複数の列に対して設定することも出来ます。
 And、Or条件等の考え方に関しては先に解説しておりますのでので、詳しくはクエリにおけるさまざまなデータの抽出条件の節をご覧ください。