天使と悪魔選手権

■アクセスのフォームにて、複数の条件を入力し、合致するリストをエクセルで出力する
  データベースを構築しようとしています。
 ⇒この複数の条件を入力する件に関し質問です。

■目的は、顧客からのアンケート回答結果をDBから取出し、エクセルにて解析を行う事です。
 情報量が膨大であるため、セグメントした形で出力し効率を上げたいと考えています。

○テーブルのフィールド構造:
  支店(テキスト型)、顧客No(数値型)、顧客名(テキスト型)、質問1(数値型)、質問2、・・・
 
○フォーム「データ抽出」の構造:

[支店名1][支店名2]
[顧客No1][顧客No2]
[顧客名1][顧客名2]
      【出力ボタン】
※上記テキストボックスいずれかに入力された条件に合致するデータが
         【出力ボタン】を押すとエクセルに出力されるという構造です。  
       ※ボタンのイベントに「抽出マクロ」を設定。

○抽出クエリ:
支店
[Forms]![データ抽出]![支店名1] 
Is Null
[Forms]![データ抽出]![支店名2] 
Is Null

顧客No
[Forms]![データ抽出]![顧客No1] 
Is Null
[Forms]![データ抽出]![顧客No2] 
Is Null

企業名
like "*" &[Forms]![データ抽出]![顧客名1]& "*"
Is Null
like "*" &[Forms]![データ抽出]![顧客名2]& "*"
Is Null
             
○マクロ(抽出マクロ):
 クエリを開く (抽出クエリ)
 コマンドの実行(エクセルに出力)
 閉じる (抽出クエリ)

と設定しました。そこで実行確認すると・・・・
 (例)
    (1)支店名1だけに入力して、他は空欄で出力ボタンを押下。
    ⇒条件セグメントされず、全てのデータがエクセル出力されてしまう。
    (2)全ての項目に入力して出力ボタンを押下
    ⇒条件セグメントされたデータがエクセル出力される。
 という現象が起こりました。

 例示(2)は良いとして、(1)の様な空欄がある状態でも、条件にマッチした出力をしたいのですが上手くいいかず困っています。

   尚、クエリの抽出条件を支店フィールドだけにした所・・

支店
 [Forms]![データ抽出]![支店名1] 
 Is Null
 [Forms]![データ抽出]![支店名2] 
 Is Nul

支店名1に入力して支店名2は空欄であっても条件にマッチした出力結果が得られました。
長文恐縮でございますが、どなたか解決法をご教授いただきたく存じます。よろしくお願いいたします。

A 回答 (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検索の場合は、作業用テーブルを別途作成して、
 各フィールドでの抽出を追加クエリで行って同テーブルに追加、という
 方法も考えられます:
 但しこちらはファイルの(一時的な)肥大化を助長するため、終了時の
 最適化はほぼ必須となります)
    • good
    • 0
この回答へのお礼

返信遅くなり大変申し訳ございません。
色々試しましたがどうもうまくいきません。
そこで顧客Noのみで運用を回すことにしてみようかと思います。

ただ蛇足1-3は参考になりました。若干無駄な入力を行っていたようでした・・。

良い結果とならず大変恐縮ですが、ご指導ありがとうございました。

お礼日時:2011/08/10 19:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!