MS Access

「抽出条件 フォーム access not in クエリ」とか「forms access in 抽出条件 複数」とかでググっても出てこなかったので、メモ

投稿日:2013年2月28日 更新日:

Accessでフォームからクエリに抽出条件をパラメータで渡すやり方が分からなくて、数時間苦労。

このタイトルがGoogleの肥やしになって、このサイトに来てくれる人が増えれば。。。

要するに私がやりたかったことは、
フォームのテキストボックスに「1,3」のように抽出したい文字を入れて、
それがフォームから呼び出すクエリの抽出条件にセットされて、
1または3のデータが呼び出せればよいのであった。

しかし、やり方が分からない。

最初は正攻法で、in演算子でチャレンジしてみた。
(「in演算子」ではなく、間違えて「in句」と覚えているので、ググるときに気づかずにずいぶん時間を浪費)
クエリの抽出条件に「in([Forms]![期間指定メール送信]![txt数字])」などと入れて、参照先のテキストボックスをフォームに配置して呼んだが、うまくいかない。
Replace関数でカンマをorに変換したりしてみたが、やはりうまくいかない。

そして最後にたどり着いたのは、Instr関数。
こんな感じ

式1: InStr(“,” & [Forms]![期間指定メール送信]![txtメール除外] & “,”,”,” & [コミュニケーション] & “,”)
抽出条件 > 0

参考になったのは以下のサイト。
Access2010でIn演算子をパラメータクエリで記述する方法を教えてください。 – Yahoo!知恵袋
<http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1374008578>

ダブルコーテーションとカンマが多いので分かりにくいが、実際の数字を入れて分かりやすくすると、例えば以下のような式になって、
InStr(‘1,3,’,’1,’)
抽出条件が「1,3,」なので、コミュニケーション・フィールドに「1,」があれば対象になる・・・って意味になる。

わざわざ「,1」のようにカンマから始まっているのはなんでだろうと考えたが、分かった。
人によっては、場合によっては、「3,1」のように検索する場合もあるからだね。
なるほど。

分かりにくいなあ。
でもAccessには他に方法はないみたい(ずいぶん調べた)。
上記の方法を考え出した人も、ずいぶん苦労しただろうなあ・・・。

改めて先人の苦労と残してくれた知恵に感謝。

-MS Access

執筆者:

関連記事

Accessのオブジェクトをデスクトップに作っておくと超便利

結構、知らない人が多いんじゃないかな。 クエリとか、フォームへの直接のリンクを、PCのデスクトップに作れること。 ユーザーがたくさんいて、その中の一部の人には、閲覧はして欲しいけど、編集はして欲しくな …

no image

AccessとBASP21で正規表現を使ってメール文から必要事項を取り出すサンプル

Accessで正規表現を使いたかったのですが、ネット上にはサンプルが少なく、苦労したので、とりあえずツギハギで作った私のコードを披露したいと思います。 Accessで正規表現を使うには、BASP21を …

no image

AccessのDoCmd.OpenForm acPreviewでデータが表示されない

なぜか、フォームに新規データを入力し、印刷プレビュー(DoCmd.OpenForm “見積請求書F”, acPreview)した際に、それまで入力したデータが消えたようになる。 …

no image

「3070 有効なフィールド名または式として認識できません」エラーで、困った

Accessで、クエリ単体での実行だとうまくいくのに、いざ、そのクエリをVBAコード内で実行すると、上記エラーが出る。 難問だった。 SQL文内でDISTINCTを使っているからかなーとか、LEFT …

no image

Accessクエリでのフィールド名は同じので重複できる

Accessではクエリの中で同じフィールド名を使えない! ・・・とずっと思っていた。 なので、テーブルで使っているフィールド名でクエリの結果を出す必要があった際には、クエリを二つ作ってそれぞれ前処理 …