- ベストアンサー
アクセス複数条件の抽出~出力について
- アクセスのフォームにて、複数の条件を入力し、合致するリストをエクセルで出力するために質問をいたします。
- 顧客からのアンケート回答結果をDBから取り出し、エクセルにて解析するために、効率的な出力方法を考えています。
- 条件のセグメント化を行い、特定の条件に合致するデータのみをエクセルに出力したいのですが、空欄の状態でも条件にマッチした出力ができません。解決策を教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
【要旨】 曖昧検索を行っている『企業名』の抽出条件を、以下のような式に 変更します。 <現状> Like "*" & [Forms]![データ抽出]![顧客名1] & "*" <修正> Like IIF(Nz([Forms]![データ抽出]![顧客名1], "")="", "", "*" & [Forms]![データ抽出]![顧客名1] & "*") 【詳細】 先程の回答の付け間違い、大変失礼致しました(汗) > (例) > (1)支店名1だけに入力して、他は空欄で出力ボタンを押下。 > ⇒条件セグメントされず、全てのデータがエクセル出力されてしまう。 提示された例ですと、『企業名』が空白だった場合、実際の抽出条件は Like "**" を指定したのと同じになってしまいます。 そのため、『支店』についての条件指定に関係なく、全てのレコードが 抽出されたものと思います。 (「Is Null」でNull(空白)のものが、「Like "**"」でそれ以外の全てが それぞれ抽出された、と) ※提示された状況から、『企業名』『顧客No』『支店』での検索条件の 指定は、And検索ではなくOr検索になっているものと推測しました。 (And検索は全条件を満たすものを、Or検索はいずれかの条件を 満たすものを、それぞれ抽出(念のため)) つまり、全件が抽出されるのは『企業名』での曖昧検索の部分が原因 ですので、ここを改修する必要があります。 その実例が、冒頭に提示した「<修正>」の式になります。 [式の説明] 上記の通り、『顧客名1』が空白だった場合に、抽出条件が実質的に 「Like "**"」となるのが問題なので、まず、『顧客名1』が空白かどうかを Nz関数で判定します。 判定の結果、空白だった場合は、IIF関数により、実際の抽出条件を 「Like ""」に置き換えてやります。 空白以外だった場合は、従来通り「Like "*" & [~] & "*"」とします。 『企業名』フィールド以外にも曖昧検索を指定しているフィールドがある 場合は、同様に改修を行ってください。 【蛇足・1】 提示されている > 支店 > [Forms]![データ抽出]![支店名1] > Is Null > [Forms]![データ抽出]![支店名2] > Is Nul は、クエリのデザインビューでの抽出条件のことではないかと思いますが、 もしもそのクエリのデザインビューで同じ行(両隣など)に条件が指定されて いないようでしたら、「Is Null」は1行だけでOkです。 【蛇足・2】 Excelへの出力方法には、マクロの『アクション』として「コマンドの実行」 の他に「出力」や「ワークシート変換」などもあります。 マクロのデザインビューの下方で指定する引数の数が多くなりますが、 対象クエリを開かずに出力したり、出力先を指定したりすることも可能 になります。 【蛇足・3】 当該クエリが、もしも「全ての検索条件式を行違いで併記した選択クエリ」 だとすると、結果表示までにかなり時間が掛かっているのではないでしょうか。 もしもその通りで、時間と気持ちに余裕があるようでしたら、「ユニオンクエリ」 について調べてみることをお勧めします。 (或いは、全てがOr検索の場合は、作業用テーブルを別途作成して、 各フィールドでの抽出を追加クエリで行って同テーブルに追加、という 方法も考えられます: 但しこちらはファイルの(一時的な)肥大化を助長するため、終了時の 最適化はほぼ必須となります)
お礼
返信遅くなり大変申し訳ございません。 色々試しましたがどうもうまくいきません。 そこで顧客Noのみで運用を回すことにしてみようかと思います。 ただ蛇足1-3は参考になりました。若干無駄な入力を行っていたようでした・・。 良い結果とならず大変恐縮ですが、ご指導ありがとうございました。