- 締切済み
Access クエリ IN演算子について
初めて質問します、よろしくお願いします。Access2007にて開発をしています。 リストボックスにて商品を選んだ際に隠しテキストボックスに´商品名1´,´商品名2´と入力し、クエリのwhere句に IIf(IsNull([Forms]![フォーム1]![抽出商品名]),True, [商品名] IN( [Forms]![フォーム1]![抽出商品名])) と記載してデータ抽出を試みているのですが、常に値が0件で返ってきません。 このやり方ではIN演算子は使えないのでしょうか? ご教唆のほど、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
解決したでしょうか。 少し方法が違いますが、開いたクエリにフィルタ をかける方法はどうでしょう。なお、クエリには 抽出条件を設定しないでおきます。 クエリの名前を「クエリ1」、リストボックスの名前を 「リスト0」とします。リストボックスのプロパティで 複数選択の項目を「標準」としておきます。 ここでは、「隠しテキストボックス」は使用せず、 変数に格納しています。同じことではありますが。 ボタンクリックでリストボックスで選択したアイテムを 抽出条件にして開いたクエリにフィルタをかける仕様になっています。 Private Sub コマンド0_Click() Dim varitm As Variant Dim strFilter As String Dim ctl As Control Dim strQuery As String strFilter = "" strQuery = "クエリ1" Set ctl = Me!リスト0 DoCmd.OpenQuery strQuery, acNormal, acReadOnly 'リストボックスから選択した商品名を取得し、変数に格納 For Each varitm In ctl.ItemsSelected strFilter = strFilter & "," & "'" & ctl.ItemData(varitm) & "'" Next varitm If strFilter <> "" Then '文字列strの先頭にいらない「,」がくっついているので取り除く strFilter = Right(strFilter, Len(strFilter) - 1) 'strFilterをフィルター用のIn句に整形 strFilter = "商品名 In(" & strFilter & ")" 'クエリにフィルタをかける DoCmd.ApplyFilter strQuery, strFilter End If End Sub なお、フィルタをかけたクエリを閉じるときに、 クエリの変更を保存するか問われるかもしれませんが、 特に保存の必要はないので、「いいえ」で閉じれば いいかと。「はい」でも変わりはないかもしれませんが。
- nicotinism
- ベストアンサー率70% (1019/1452)
In演算子のカッコの中は、値そのもの(リテラル値)か式でなければなりません。 変数や今回のようなオブジェクト([Forms]![フォーム1]![抽出商品名])では機能しません。 フォームのフィルターではダメですかね? hatena さんの http://hatenachips.blog34.fc2.com/blog-entry-96.html クエリでやろうとすると IN( [Forms]![フォーム1]![抽出商品名])) が In('商品名1','商品名2') となるようにVBAでその都度クエリのSQL文を変更する必要があります。
お礼
ご回答頂きありがとうございます。やはりオブジェクトの値はダメなんですね。ご紹介頂いた内容で試してみたいと思います。 ありがとうございました。