• ベストアンサー

アクセスのクエリーで抽出方法

以前(9/25)にもこのgooで質問しいろいろ指導を受けたのですがなかなか解決せず、時がたちなかなか回答が得られず、また同じ質問をします。 クエリーで抽出する方法なのですが、例えば a   b 山   50 川   30 のようなクエリーの表があります。フォームでテキストボックスに”山”と入力したら 山   50 と表示することはできますが”すべて”と入力したら 山   50 川   30 と表示したいのです。クエリーにはすべてという文言はありません。 クエリーの抽出条件でaのフィールドに=IIf(フォーム名![Text1],フォーム名![Text1],Is Not Null)と入力するもののうまくいきません。 アクセス超初心者です。なおアクセス97を使用しています。よろしくご指導ください。

  • yy10
  • お礼率48% (48/99)

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

  • ベストアンサー
  • oka123
  • ベストアンサー率31% (69/219)
回答No.6

やっと理解できました。ただ、最後に1点わからないんです。最後に「"A1" と入力した際に 式="A1"  となったりしますが上書き保存すれば  "A1"  となります。」 となっていますがフィールドにA1と入力しても式1: [A1]となってしまい[ ]に囲まれるのです。数字だけ、たとえば10と入力すれば”式1: 10”となりうまくいくのですがA1とか数字以外の文言を入れると[]に囲まれて実行してもパラメータの入力と聞いてきてうまくいきません。基本的なことなのかも知れませんが[]を消す方法があれば教えてください。 *********************************************** *********************************************** こんにちわ 補足です 「表示」のところの 四角マークを空白にして保存すれば 式 は消えて  "A1" となります (A1だけでなくダブルコ-テ-ションも当然必要です) 四角マークはクエリー作成での4段目のところにあります つぎの段階では使わない項目であれば ここは空白(マーク無し)とするための機能です

yy10
質問者

お礼

ありがとうございました。うまくいきました。当然必要な””をつけなかったからうまくいきませんでした。アクセス超初心者ということでいろいろ初歩的な質問を何回もつきあっていただきありがとうございました。

その他の回答 (5)

  • oka123
  • ベストアンサー率31% (69/219)
回答No.5

追加説明です >「すべて」でなくA*にするということは >テキストボックスにすべて*と入力すること >なのですか。 そうです 私の場合はテキストボックス初期値として「規定値」で A* を入れています ダブルクリックで A* にもどるように イベントプロシジアで指定しています >あと、新規の項目を(右側へ) >つくるというのは、クエリーの場所に新たに >フィールドを追加するということでしょうか。 >(項目名の欄へは A1とするのはフィールド名がA1?) -------------------------------------------- フイールド の行 | FILED-NAME | "A1" | --------------------------------------------                  (四角は空白に) フイールドの行のところには普通はテーブルの なかのフイールド名をもってきます それとはべつの列に "A1"  というように書きます これはフイールド自体を表現するのでなくて A1 という値があるということを意味します したがってその下の行で選択条件を LIKE で書けば "A1"  と A*  が 一致することになります OR条件とするために、この LIKE文 は 一段下の選択条件行へ書きこみます 同一ラインに書くとAND条件になってしまいます ----------------------------------- テキストボックスで「すべて」という言葉を 使いたいならば おなじ理屈でそれでも可能です "A1"  のかわりに "すべて" とすればよいです ただし 同じ言葉「すべて」だとフイールド欄へは ひとつだけしかつくれないと思います * によるLIKE機能も期待できなくなります  複数項目で選択するならさらに右へもうひとつ、例えば "A2" という値を入れればいいです ----------------------------------- "A1" と入力した際に 式="A1"  となったり しますが 上書き保存すれば  "A1"  となります

yy10
質問者

補足

やっと理解できました。ただ、最後に1点わからないんです。最後に「"A1" と入力した際に 式="A1"  となったりしますが上書き保存すれば  "A1"  となります。」 となっていますがフィールドにA1と入力しても式1: [A1]となってしまい[ ]に囲まれるのです。数字だけ、たとえば10と入力すれば”式1: 10”となりうまくいくのですがA1とか数字以外の文言を入れると[]に囲まれて実行してもパラメータの入力と聞いてきてうまくいきません。基本的なことなのかも知れませんが[]を消す方法があれば教えてください。

回答No.4

#2 です。 非表示のフィールド名には、 IIf([Forms]![フォーム1]![テキスト0]<>"すべて",[a]=[Forms]![フォーム1]![テキスト0],[a] Is Not Null) 抽出条件には、<>false (=True) となっているかと思います。 フィールド名が可変になっていて、 ”すべて”が入力されていないときは、 テキストボックス入力と一致するもの(True状態:-1のレコード)が選択されます。 ”すべて”が入力されているときは、 aがNot Nullのもの(True状態:-1のレコード)が選択されます。 [a]=[Forms]![フォーム1]![テキスト0]も[a] Is Not Nullも返り値はTrue(-1)かFalse(0)になるということです。 うまく説明できなくてごめんなさい。 これを機にSQLを勉強してくだされば、幸いです。 クエリーって、=などを自動的に判断している部分があって、 痒いところに手が届かないんですよね。

  • oka123
  • ベストアンサー率31% (69/219)
回答No.3

こんにちわ すべてのときには 「すべて」 ではなくて A* などとします(*をつけるのが、みそです) そして以下のようにして選択クエリーをつくります まず 山としたときにその値を一致させる役割として クエリーの当該項目の選択条件欄へ Forms![form-name]![field-name] とします つぎに新規の項目を(右側へ)つくります 項目としてはテーブルからの項目名ではなく 項目名の欄へは "A1" とします(値そのものを定義したことになります) この項目の抽出条件欄へ (or条件になるように行は、ずらします) Like Forms![form-name]![field-name]     () が必要かもしれませんが? とします この式で * がlike命令で有益となり A* と A1 とが検索一致することになり 全件抽出ができます 本格的にはクエリーではなく「モジュール」で 行うほうが複雑な条件も表現できるのですが クエリーだけで行う場合は、上の方式が有効です それから、「項目は作らない」のところは 白紙(四角印のマーク無し)で指定します

yy10
質問者

補足

すみません。補足願います。「すべて」でなくA*にするということはテキストボックスにすべて*と入力することなのですか。あと、新規の項目を(右側へ)つくるというのは、クエリーの場所に新たにフィールドを追加するということでしょうか。(項目名の欄へは A1とするのはフィールド名がA1?) 見当違いでしたらゴメンナサイ

回答No.2

うまく説明ができませんが、ここはひとつSQLを勉強してみてはいかがでしょうか? 選択クエリーをSQLビューで開いてみて下さい。 クエリーの抽出条件でaのフィールドに=IIf(フォーム名![Text1]<>"すべて",フォーム名![Text1],Is Not Null)と入力する。 この場合のSQL文は、 SELECT a, b FROM テーブル名 WHERE (((a)=IIf([フォーム名]![Text1]<>"すべて",[フォーム名]![Text1],(a) Is Not Null))); となり、”すべて”を入力した場合の条件がa=(a)Is Not Null では正しくデータを取得できません。 SELECT a, b FROM テーブル名  WHERE (((IIf([Forms]![フォーム名]![Text1]<>"すべて",[a]=[Forms]![フォーム名]![Text1],[a] Is Not Null)))); と書けば、すべてが入力された場合、[a] Is Not Nullという条件で絞り込まれます。 テーブル名、フォーム名には任意のものをセットしてください。 難しいようでしたら、補足入れてください。

yy10
質問者

お礼

うまくいきました。ありがとうございました。 ただどうしてこうなるかはチンプンカンプンです。SQLはアクセスの参考書を見ながら(入門書)で簡単なユニオンクエリーを作ったことがあるだけです。新たなフィールドは非表示になっていましたが表示してみるとすべて-1が入っていましたね。このフィールドの意味だけでも簡単に教えてもらえませんか。図々しく何回もきいてすみません。

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.1

>クエリーの抽出条件でaのフィールドに=IIf(フォーム名![Text1],フォーム名![Text1],Is Not Null) >と入力するもののうまくいきません。 どうしているいるのか、いまいちわかりませんが、 Like "*" ではどうですか?

関連するQ&A

  • ACCESSのクエリの抽出

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

  • アクセスでクエリーによる抽出方法

    アクセスの超初心者です。 クエリーのデータをフォームのコンボボックス等のデータを選ぶことにより抽出したいのです。クエリーの抽出条件にフォームのコンボボックスを割り当てて抽出することはできるのですが、例えばクエリーデータは下記のようになっています。  A  B  石川  100 東京  200   沖縄  150 フォームのコンボボックスで石川を選べば  "石川" "100"と表示できますが、コンボボックスに”すべて”という項目をつけてその”すべて”をクリックするとクエリーが全表示になるようにしたいのです。(そのクエリーにはすべてという項目はない) 長くなりましたがおわかりいただけたでしょうか。よろしくお願いします。 また、クエリーを使わず別の抽出方法がありましたら教えてください。というのもいろいろな抽出条件をするのにそのつどクエリーを作らなければならないからです。よろしくお願いします。

  • Access フォームコンボボックス空白をクエリで抽出したい

    現在access2000を使って、 フォーム1内にコンボボックスを作って コンボボックス内に1,2,3 と項目を入れています。 一方、クエリを使って、上記フォーム内のコンボボックスをつなげて1,2,3をそれぞれ抽出することはできるのですが、 1から3まで全てをiif関数などで 抽出したいと考えてします。 僕が考えた関数は iif(isnull([フォーム1][コンボ1]),is not null ,[フォーム1][コンボ1]) とクエリ抽出条件内に入力すると、結果は、 1、2、3をそれぞれフォームコンボボックスで選択すれば、クエリに反映されるのですが、コンボボックス内を「空白」の状態にすると、1,2,3すべてがクエリで抽出されるのではなく、何も抽出されないという結果になってしまいます。 どうすれば、クエリで1から3すべてを抽出することができるのでしょうか?多分、iif関数内の「空白」は空白として処理されないような気がします。 よろしくお願いします。

  • クエリーで全部のデータを抽出する方法

    アクセスのクエリーでデータを抽出する時、具体的にはフォームでデータを入力し抽出するのですが、たとえばフォームのテキストボックスに数字を入れないとそのクエリーのフィールドは抽出がかからないようにしたいのです。(抽出フィールドが1つなら数字をいれなければクエリーのデータすべてが表示される) ----------------------------------- フィールド   A      B     c テーブル   テーブル1 テーブル1 テーブル1 抽出条件    []    [] または    ---------------------------------- 上はクエリーのデザインですがクエリーをひらくと抽出条件をきいてきますがA列は何も入力しないでB列では1と入力するとBの列に1の入ってるレコードを表示させたいのです。(もし空欄が無理ならAの列の時何かある文字を入力すると全部表示になる、でもいいです。) まわりくどくなりましたが、アクセス超入門者です。よろしくおねがいします。

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

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

  • アクセスでデーター抽出方法を教えて

    アクセスで、クエリー&サブフォームを使わず、テーブルのデータをフォーム上で抽出したいです。教えて下さい。(例)テーブル1:商品名A 商品番号2・・・・・、フォーム上で商品番号2と入力したら商品名Aだけを表示したい。

  • アクセスでクエリーによる抽出方法

    アクセスでクエリーによる抽出方法を教えてください。 例えばテーブルに    フィールド1  フィールド2  フィールド3    ---------------------------------------      a     100     700       a      200     600       a     300     700 とします。そしてすべてクエリーにとりこみます。ここから抽出するのですが、      フィールド1  フィールド2   フィールド3    ---------------------------------------       a        100    700        a        200     600        a        300   700 抽出条件   [問1] または           [問2]                     [問3] 上記はクエリーのデザインビューですが、[問1]、[問2]、[問3]のパラメータすべてを入力するのであれば何も悩みません。しかし例えばフィールド1は"a"でフィールド2は検索せず(検索対象からはずす)、フィールド3は"700"を検索したい場合、[問1]では"a"を入力し、、[問2]は何も入力しなくて、[問3]は"700"を入力し検索すると、   フィールド1  フィールド2  フィールド3   ---------------------------------------      a    100    700      b    200    600      c    300    700   となるのです。どうにかして フィールド1  フィールド2  フィールド3 --------------------------------------    a     100     700  というような検索結果をだしたいのです。 アクセス初心者です。お願いします。

  • フォームからの入力でクエリを抽出するには?

    OS:Win7 Access2003 フォームで入力したデータを元にクエリで抽出させます。 フォームに'ABC'と入力した時は、クエリで'ABC'のデータを表示し、 フォームが未入力の時はすべてのデータを表示させるにはどうすればよいでしょうか? 上記条件では'ABC'のみ抽出させ、'DABC','ABCD'は対象外にします。 宜しくお願いします。

  • ACCESSのあいまいな条件のクエリ 

    フォームで金額を入力します。 この入力された金額を使ってクエリの条件を作りたいと考えています。 <条件> ・金額が未入力の場合は、全て抽出。 ・金額が入力されている場合は、その金額以上を抽出   (例:1000と入力された場合は、>=1000) 下記のような条件式を入れたら、金額を入力しているにも関わらず、 何も入力されてきませんでした。 IIf(IsNull([Forms]![フォームA]![txt金額]),Like "*",>=Val([Forms]![フォームA]![txt金額]))

  • Access抽出クエリの基本的なこと

    お世話になります。 初心者で苦労しながらもAccess2000でデータベースを作成しています。 非常に基本的な質問だと思うのですが、どなたかご教授願います。 日付を含むフィールドがあるテーブルがあり、クエリにてその日付から 年と月を拾っています。 ID   入力日   年:Year([入力日])   月:Month([入力日]) 1   2001/07/06    2001          6 2   2002/06/07    2002          6 3   2002/07/19    2002          7 別に作成したフォームに年と月を絞り込むためのコンボボックスをそれぞれ配置し、 入力された値によって上記クエリの抽出条件に反映させたいのですが、コンボに何も 入力されていないときは全てのデータを表示したいんです。 「コンボ月=2002」&「コンボ月=6」でID=2のデータのみを、 「コンボ月=(Null)」&「コンボ月=6」でID=1と2のデータを表示したいんです。 (判りにくくてすみません。。) このような場合、抽出条件に記述する式はどのように設定したら良いのでしょうか? IIfでIsNullの条件式を組んだのですが、Nullの時に返す値が判りません。 どうかよろしくお願いします。