• 締切済み

Access クエリ IN演算子について

初めて質問します、よろしくお願いします。Access2007にて開発をしています。 リストボックスにて商品を選んだ際に隠しテキストボックスに´商品名1´,´商品名2´と入力し、クエリのwhere句に IIf(IsNull([Forms]![フォーム1]![抽出商品名]),True, [商品名] IN( [Forms]![フォーム1]![抽出商品名])) と記載してデータ抽出を試みているのですが、常に値が0件で返ってきません。 このやり方ではIN演算子は使えないのでしょうか? ご教唆のほど、よろしくお願いします。

みんなの回答

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

解決したでしょうか。 少し方法が違いますが、開いたクエリにフィルタ をかける方法はどうでしょう。なお、クエリには 抽出条件を設定しないでおきます。 クエリの名前を「クエリ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)
回答No.1

In演算子のカッコの中は、値そのもの(リテラル値)か式でなければなりません。 変数や今回のようなオブジェクト([Forms]![フォーム1]![抽出商品名])では機能しません。 フォームのフィルターではダメですかね? hatena さんの http://hatenachips.blog34.fc2.com/blog-entry-96.html クエリでやろうとすると IN( [Forms]![フォーム1]![抽出商品名])) が In('商品名1','商品名2') となるようにVBAでその都度クエリのSQL文を変更する必要があります。

sho-birdie18
質問者

お礼

ご回答頂きありがとうございます。やはりオブジェクトの値はダメなんですね。ご紹介頂いた内容で試してみたいと思います。 ありがとうございました。

関連するQ&A

専門家に質問してみよう