パラメータクエリにIn演算子を用いて複数の条件で抽出する

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

 パラメータクエリでIn演算子を用いてカンマ区切りにより複数の値を指定し、いずれかに該当するレコードを抽出する方法についてです。
 抽出の対象としてこのようなテーブルを用いるものとします。



失敗例

f:id:accs2014:20170831231406p:plain:right:w450

 まずは会員番号(数値型の列です)を複数指定してデータを抽出する例を考えてみます。
 普通に考えれば抽出条件欄にIn演算子を記すこととなります。具体的に「In ([番号を入力])」と記してみます。


f:id:accs2014:20170831231403p:plain:right:w500

 そして「1,3,5」と、3つの値を指定してみますが…


f:id:accs2014:20170831231400p:plain:right:w350

 何も抽出されません;-o-)


数値を抽出する例

f:id:accs2014:20170831231356p:plain:right:w600

 そこで少し考え方を変えてみます。
 抽出条件ではなく、新たに次のような列を設けます。



x: Eval([会員番号] & " In (" & [番号を入力] & ")")

 そして、この列の抽出条件を「-1」とします(「True」でもOKです)。


f:id:accs2014:20170831231523p:plain:right:w500

 このクエリに対し「1,3,5」と3つの値を指定すると…


f:id:accs2014:20170831231520p:plain:right:w450

 今度はうまくいきました。
 要は、抽出条件にパラメータを渡そうとするとなかなかうまくいかないので、むしろ新たな列として評価可能な文字列を生成してその評価結果により行を抽出するというわけです。
 なお、この列を表示させたくなければ「表示」欄のチェックを外しておけばOKです。


文字列を抽出する例

Replace関数を用いる例

f:id:accs2014:20170831231516p:plain:right:w600

 次に、好きな球団(テキスト型の列です)に対する抽出を行ってみます。
 次のような列を設けます。



x: Eval("'" & [好きな球団] & "'" & " In ('" & Replace([好きな球団を入力],",","','") & "')")

 そして、この列の抽出条件を「-1」とします。


f:id:accs2014:20170831231510p:plain:right:w500

 「巨人,阪神,オリックス」と、3つの値を指定してみます。


f:id:accs2014:20170831231506p:plain:right:w500

 うまくいきました。

BuildCriteria関数を用いる例

f:id:accs2014:20180422001329p:plain:right:w600

 内容は上記と同じですが、こちらではBuildCriteria関数を用います。
 次のような列を設けて抽出条件を「-1」とします。



x: Eval(BuildCriteria("'" & [好きな球団] & "'",10,"In (" & [好きな球団を入力] & ")"))

 そして今度は「中日,西武,巨人」と、3つの値を指定してみます。


f:id:accs2014:20180422001326p:plain:right:w500

 こちらもうまくいきました。お好みでどうぞ_ _)