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

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

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


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

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


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

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


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

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


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

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



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

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


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

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


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

 今度はうまくいきました。
 なお、この列を表示させたくなければ「表示」欄のチェックを外しておけばOKです。


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

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



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

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


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

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


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

 こちらもうまくいきました。

 抽出条件にパラメータを渡そうとするとなかなかうまくいきません。そうするよりも、新たな列を設けて確実に評価可能な文字列を生成し、その評価結果により行を抽出するというわけです。
 ちなみにBuildCriteria関数と組み合わせれば「Like "A*" Or Like "B*" Or …」という抽出を実現できそうですので興味のある方は試してみて下さい;-o-)