パラメータクエリでIn演算子を用いてカンマ区切りにより複数の値を指定し、いずれかに該当するレコードを抽出する方法についてです。
抽出の対象としてこのようなテーブルを用いるものとします。
失敗例
まずは会員番号(数値型の列です)を複数指定してデータを抽出する例を考えてみます。
普通に考えれば抽出条件欄にIn演算子を記すこととなります。具体的に「In ([番号を入力])」と記してみます。
そして「1,3,5」と、3つの値を指定してみますが…
何も抽出されません;-o-)
数値を抽出する例
そこで少し考え方を変えてみます。
抽出条件ではなく、新たに次のような列を設けます。
x: Eval([会員番号] & " In (" & [番号を入力] & ")")
そして、この列の抽出条件を「-1」とします(「True」でもOKです)。
このクエリに対し「1,3,5」と3つの値を指定すると…
今度はうまくいきました。
要は、抽出条件にパラメータを渡そうとするとなかなかうまくいかないので、むしろ新たな列として評価可能な文字列を生成してその評価結果により行を抽出するというわけです。
なお、この列を表示させたくなければ「表示」欄のチェックを外しておけばOKです。
文字列を抽出する例
Replace関数を用いる例
次に、好きな球団(テキスト型の列です)に対する抽出を行ってみます。
次のような列を設けます。
x: Eval("'" & [好きな球団] & "'" & " In ('" & Replace([好きな球団を入力],",","','") & "')")
そして、この列の抽出条件を「-1」とします。
「巨人,阪神,オリックス」と、3つの値を指定してみます。
うまくいきました。
BuildCriteria関数を用いる例
内容は上記と同じですが、こちらではBuildCriteria関数を用います。
次のような列を設けて抽出条件を「-1」とします。
x: Eval(BuildCriteria("'" & [好きな球団] & "'",10,"In (" & [好きな球団を入力] & ")"))
そして今度は「中日,西武,巨人」と、3つの値を指定してみます。
こちらもうまくいきました。お好みでどうぞ_ _)