• ベストアンサー

AccessクエリでYes/No型データの抽出

AccessクエリでYes/No型データの抽出条件について教えてください。 フォーム上のオプショングループにオプションボタン 1:Yes 2:No 3:両方 の3つを作成し、選択したオプション値によって抽出条件を変えたいのですが、 Choose([Forms]![オプショングループ名],-1,0,-1 Or 0)とすると3:両方を選択した際に、Yesのデータしか抽出できませんでした。 ただ、-1 Or 0 を -1 Or 1 としたら、両方抽出されました。 処理的には解決できたのでOKなのですが、理由がわからずちょっと気持ち悪いので。。。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Choose([Forms]![オプショングループ名],-1,0,-1 Or 0) の関数が返す値と、Yes/No型のデータとを比較して抽出したという事ですよね? Choose([Forms]![オプショングループ名],-1,0,-1 Or 0) この関数は オプショングループ名 = 1 の場合 → -1 オプショングループ名 = 2 の場合 → 0 オプショングループ名 = 3 の場合 → -1 or 0 の値を返します。 そうなると抽出条件の論理式は 1:Yesの場合  → データ = -1 2:Noの場合  → データ = 0 3:両方の場合 → データ = -1 or 0 となりますが、この3番目の式は 「データが -1 もしくは 0 の場合」という意味にはなりません。 「データ = -1」もしくは「0」のどちらかの条件を満たす場合、という意味になってしまいます。 データと比較されるのはあくまでイコールの直後にある数値だけで 括弧を付け加えると (データ = -1) or ( 0 ) のようなイメージです。 この論理式は、データが -1 であった場合には -1(True)が返ってきて「条件を満たしている」と判定されますが データが -1 でなかった場合は 0(False)が返ってきて「条件を満たしていない」と見なされます。 同じように考えると データ = -1 or 1 の論理式は データ = -1 の場合  → -1 データ <> -1 の場合 → 1 の値が返ってくる事になります。 論理式というのは、返ってきた値が 0 の場合は「条件を満たしていない」と見なし 返ってきた値が 0 以外であればすべて「条件を満たしている」と見なすので こちらの場合はデータの値と関係なく すべてのレコードを抽出するような条件式になってしまうのです。

pinopino77
質問者

お礼

ありがとうございました!論理式をよく理解しないまま使用しておりました。大変勉強になりました。 ということは、条件式はこんな感じでしょうか? Choose([Forms]![オプショングループ名],-1,0,([Forms]![オプショングループ名])=True) ちなみに・・・この処理でChoose関数を使うこと自体、おかしいのでしょうか? 他に良い方法がありましたら教えてください。

その他の回答 (2)

回答No.3

#1です。 「=(イコール)」はあくまで左右にある一つずつの値を比較するだけですので 「データが -1 か 0 のどちらか」という事を意味する論理式は (データ = -1) or (データ = 0)     や データ in(-1, 0) という形になります。 (ただし後者の in が使えるのはクエリ等のSQLの条件式のみ) 抽出条件をどのように設定しているかにもよりますが クエリのデザインで抽出条件の欄にChoose関数をセットされているのであれば 抽出条件の1行目には =Choose([Forms]![オプショングループ名],-1,0,0) 2行目(または: の行)には =Choose([Forms]![オプショングループ名],-1,0,-1) を入れておくという形ではいかがでしょうか。 その後SQLビューで見てみると分かりますが、条件式は (データ = Choose([Forms]![オプショングループ名],-1,0,0)) OR (データ = Choose([Forms]![オプショングループ名],-1,0,-1)) という記述になり オプショングループ = 1 の場合  → (データ = -1) OR (データ = -1) オプショングループ = 2 の場合  → (データ = 0) OR (データ = 0) オプショングループ = 3 の場合  → (データ = 0) OR (データ = -1) という意味になってきます。 オプショングループが 1, 2 の場合にはChoose関数の返す値は同じですので 2行目の「または」の条件に意味はありませんが オプショングループが 3 の場合はChoose関数の返す値が異なりますので 「または」のOR条件が生きてくる形になります。

pinopino77
質問者

お礼

なるほど!モヤっとしてたものがスッキリしました。 すごく丁寧に教えて下さり、ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

エクセルのCHOOSE関数は=CHOOSE(INDEX,値1、値2、・・・)の形をしており、INDEXは1より小だとエラーに成ります。INDEXに実数を指定しても切り捨てて整数として扱われる。値1・・はあくまで値であって、=CHOOSE(A1,"a",C1+3,"c")のように式は入れることは可能ですが 処理ルーチンは指定しようがありません。 Accessはエクセルと同じである必要もなく、全く同じかどうか判りませんが、[Forms]![オプショングループ名]で決まる値は1,2,3ではなく1、0、-1を取るとすればおかしいのではないでしょうか。アクセスではそれぞれボタンの値は0と-1をとるようですが。 また第2以下の引数に1OR0を(OR入り)指定するのはおかしいのではないでしょうか。 無知のためとんでもないことをいっていたら済みません。

関連するQ&A

  • access クエリでIIF文で抽出条件なし

    フォームにコンボボックスを用意し、(コンボボックスは、「両方」、「条件A」、「条件B」の3項目です) クエリで抽出条件にIIF文を使い、 IIf([Forms]![フォーム]![コンボボックス]="両方",'',[Forms]![フォーム]![コンボボックス]) ”両方”を選択した場合は、「抽出条件なし」としたいのですが、できませんでした。 別案として、 IIf([Forms]![フォーム]![コンボボックス]="両方","条件A" or "条件B",[Forms]![フォーム]![コンボボックス]) なども試しましたができませんでした。 どうか解決方法をご教授願います。

  • Access チェックボックスを利用した絞込検索のクエリ記述

    ここ数日、試行錯誤やgoogle検索したのですが、分からないためヒントを下さい。 Accessで、チェックボックス(Yes/No)を含むテーブルがあります。 検索フォームを作成し、ここにチェックを入れることで、テーブルから一致するデータを抽出したいです。 ただし、「Yes」のみが有意なデータで、「No」は無視したいです。    チェックA チェックB チェックC 1    Yes    No     No 2    Yes    Yes    No 3    Yes    Yes    Yes (得たい結果) チェックAをYesで検索…1,2,3 チェックA+BをYesで検索…1,2 チェックA+B+CをYesで検索…3 単に検索フォームのチェックボックスの値を「抽出条件」に入れますと、「No」まで一致するように抽出するので意図と違います。 チェックを入れなかった項目については無視して、クエリを働かせられればよいのですが...。 どのようにクエリを記述したらよいのでしょうか。 フォームにあるチェックボックスからのデータの取得や抽出結果のフォームへの表示などはできています。 よろしくお願いいたします。

  • ACCESS クエリの抽出条件で全てを抽出したい

    初歩的な質問で申し訳ありません。 売上入力フォームのオプショングループに配置した3つのトグルスイッチによって、クエリからデータを抽出したいのですが、 オプション値1 全て  オプション値2 現場 オプション値3 得意先 IIf([Forms]![F_売上入力]![fr_2]=2,"現場",IIf([Forms]![F_売上入力]![fr_2]=3,"得意先","*")) と抽出条件に入力しましたが、全てのみ上手くいきません。単純なミスとは思うのですが、どうしても出来なくて。。。他に全てを表示させる方法等ありましたら、是非、お知恵を貸して下さい。

  • ACCESSのクエリの抽出

    ACCESS2003を使っています。フォームのコンボボックスに入っているデータを見てクエリで抽出したいと思っています。 フォームのコンボボックスにデータが入っているときは、そのデータで抽出を行い、nullのときは抽出をやめてすべてのデータを表示させたいです。 抽出項目には、null値はありません。 クエリの抽出欄に下記の式を入れましたがうまくいきません。 IIf(IsNull([Forms]![フォーム名]![コンボボックス名])=true , Is Not Null , [Forms]![フォーム名]![コンボボックス名]) コンボボックスにデータが入っている場合は、抽出はうまくいくのですが、nullのときは、何も表示されません。 どこか式が違っているのでしょうか? よろしくお願いします。

  • ACCESS Yes/No型の集計

    ACCESSでチェックボックスが複数あるテーブルがあります。これら各々の個数を表示させたいと奮闘しております。複数のフィールドがあるので、やり方をご教授いただけますようお願いいたします。構造とやりたいことは下記に記します Yesはチェックボックスにチェックが入っている状態です テーブル ---------------------------------------------- グループ   分類1   分類2   分類3 ----------------------------------------------   A   |  Yes  |  No  |  Yes   A   |  No   |  No   |  Yes   A   |  Yes  |  Yes  |  No   B   |  Yes  |  No  |  Yes   B   |  No   |  No  |  Yes   B   |  Yes  |  No  |  Yes   ・   ・   ・   ZZ 上記のようなテーブルがあります。これを ----------------------------------------------------- グループ   グループ総数   分類1   分類2   分類3 -----------------------------------------------------   A    |   3     |   2   |  1   |  2   B    |   3     |   2   |  0   |  3   ・   ・   ・   ZZ とういうようにグループの総数とチェックボックスにチェックが入った数を算出させたいんです どうかご教授願います

  • アクセスのクエリ抽出ができない。

    アクセスのクエリで、フォーム上のチェックのオンオフで抽出データの抽出条件を変更しようと思っています。 条件は、データの作成日付(yyyy/mm/dd形式)で、抽出の条件式は IIf([Forms]![F_送付状]![チェック40]=False,>=DateAdd("m",-1,Date()),>"0") です。チェック40がフォーム上のチェック(コントロールソースなし)で、オフの場合は、1ヶ月前までのデータを抽出、オンの場合は全件を抽出したいと思っています。 上記の式でうまく抽出できない(データが抽出できない)のですが、アドバイスをお願いします。

  • アクセスクエリでの空白の値の表示

    フォームで条件フィールドから2つ同時の検索をかけたく クエリに以下の式を記載致しました。 検索はかかるのですが空白のデータがでてきません。 空白のデーターも表示させたいためにはどうしたらいいでしょうか? 式1: IIf(IsNull([Forms]![フォーム]![条件1]) And IsNull([Forms]![フォーム]![条件2]),True,[条件]=[Forms]![フォーム]![条件1]Or [条件]=[Forms]![フォーム]![条件2] 抽出条件  True

  • Yes/No型のデータ抽出

    Access97で出面管理(出勤簿)を作成しています。 レポートを印刷する際請求を出す都合上、自社社員分と応援社員分とを分けるため社員名と所属が自社か応援かを分けるためのテーブルを作成しました。 その分類方法はYes/No型(True=応援社員、False=自社社員)に設定しました。 その際、氏名を選択すると自動で自社/応援かが認識できるようにしました。 その後、必要なテーブル・クエリー等を設定し、フォームから入力してみると 自社社員としてしか認識しません。 そこで該当するテーブルから入力(氏名=テキスト型・自社/応援=Yes/No型 チェックボックスONで応援扱い)するとフォーム・レポートでも 認識してくれます。 しかしこの方法では毎日同じ応援社員がいた場合その都度チェックボックスを Onにしなければならず非常に厄介です。 しかもデータが毎日蓄積されるのでしばらく入力を忘れたりするとそれこそ手間がかかってしまいます。 どのように設定(テーブル・クエリー・リレーション等)を変更してやれば 良いのかアドバイスお待ちしております。 ちなみに現時点ではフォームから入力する際、氏名をコンボボックスで選択でき その後連動して所属が決定するようになってます。

  • ACCESSクエリ抽出条件について

    フォーム画面のリストボックスで複数選択が出来るよう設定し、その結果をクエリの抽出条件で forms![フォーム名].[リストボックス名] としたのですが全く反映されません。 複数選択が出来ないようにしたら問題なく表示されるのですが、上記の記述以外に入力しないといけないのでしょうか?

  • クエリの抽出条件

    クエリの抽出条件を手入力では無く、コンボボックス方式で プルダウンでリストを選びたいと思い下記の抽出条件を入力 [Forms]![フォーム名]![コンボ名] しかし、パラメータ入力時の名前が、Forms!フォーム名!コンボ名と変わるのみで プルダウンになりません クエリを過去のデータ検索のみで使用したいと思ってます。 ネットをくぐると、メインフォームを開いてとありますが、それでも駄目です。 また、クエリー検索だけで、メインフォームを開かないでプルダウン方式には 出来ないものでしょうか よろしくお願い致します

専門家に質問してみよう