• 締切済み

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

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

みんなの回答

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.5

>クエリーの抽出条件に・・=IIf([石川]<>"すべて",[石川],Is Not Null) ・・ [石川]ではなくフォームのテキストボックスやコンボボックスのフィールド名を 記述するんです。 例えばフォームのText1に石川と入力すると =IIf(フォーム名![Text1]<>"すべて",フォーム名![Text1],Is Not Null)の フォーム名![Text1]のところに入力した石川という値が代入され石川 100とクエリ で抽出されすべてと入力するとクエリの抽出をするフィールドのレコードが空白で ないものが抽出されます。 クエリの抽出する条件を記述するフィールドはAのフィールドです。 クエリはこんな感じですよね。 ------------------------------------------------------------------- A                                    |B ------------------------------------------------------------------- =IIf(フォーム名![Text1]<>"すべて",フォーム名![Text1],Is Not Null) | >フォームのコンボボックス等のデータを選ぶことにより抽出したいのです。 質問の中に上記があったのでフォームに入力などをした値を抽出条件に反映させる のだと思ったのですが。 =IIf([石川]<>"すべて",[石川],Is Not Null)では意味をなしませんよね。 [石川]というフィールドはフィールド名ではないのでしょ。テーブルのAという フィールドに石川というレコードがあるんですよね。 フォームから値を持ってきて抽出条件に入れるという事を前提に回答したのですが 違うのでしょうか?

yy10
質問者

補足

o cyanさんの言うとおりです。ただわかりやすいように[Text]やコンボといったフォームからの入力で抽出する方法でなくクエリーで直接抽出する方法で説明したかったので何か変な記述となってしまいました。今の説明は忘れていただきたいです。 o cyanさんの説明のとおりクエリーの抽出のところに=IIf(フォーム名![Text1]<>"すべて",フォーム名![Text1],Is Not Null) と入力してもうまくいきません。フォーム名![Text1]の値を選択すればちゃんと抽出されますが、”すべて”とテキストに入力しても何も表示されません。抽出条件にIs Not Nullと入力すればすべて表示されますが、llfの関数を使い上記の式を入力してもうまくいかないのです(式は理解でき、うまく表示されるとおもうのですが) 何度もすみません。よろしくご指導ください。

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.4

コンボボックスに表示されるのが  A  B  石川  100 東京  200 沖縄  150 と思っていました。 テキストボックスやコンボボックスの値でクエリでA・Bのレコードを抽出すると いう事ですね。 コンボボックスでと始め見たのでコンボボック内に表示される内容で"すべて"を 追加してと言う意味で始めに回答してしまいました。 それでも同じようにできますけど。 コンボボックスで選択もしくは入力してクエリで抽出するには =IIf(フォーム名![Cmbo1]<>"すべて",フォーム名![Cmbo1],Is Not Null) で出来ます。しかし"すべて"以外の"全て"では抽出できません。空のクエリの結果 になってしまいます。 テキストボックスから抽出する場合は(テキストボックスをText1として) =IIf(フォーム名![Text1]<>"すべて",フォーム名![Text1],Is Not Null) で大丈夫です。これも"すべて"以外の"全て"は同様の結果になります。 それと記述内のフォーム名を書き忘れてしまいました。ゴメンナサイ。

yy10
質問者

補足

度々すみません。なかなかうまくいきません。 o cyanさんの説明を簡単に解釈すると クエリーの抽出条件に例えば =IIf([石川]<>"すべて",[石川],Is Not Null) と入力する。そしてクエリーをひらくとパラメータの入力と聞いてきますね。”石川”と入力すると  石川  100 とでてきて、”すべて”(または石川以外のすべての文字)と入力すると全部表示される、という解釈でしょうか。この式を抽出条件に入力しても石川と入力すれば石川のレコードは表示されますが、すべてと入力してもまったくレコードは表示されません。私の解釈違いでしょうか。ちなみにIs Not Nullは空欄を除くすべてを表示させる定数のようなものですね。 何度もすみません。

回答No.3

こんにちは。 クエリやテーブルを元に表形式のフォームを作り、このフォームに県名を選択できるコンボボックスを作成しておく。 フォームを開いたときには、コンボボックスには、”すべて”と表示されており、 ---以下はVBAの処理になりますが、--- コンボボックスで県名を選択すると県名でフォームにフィルタをかける。 コンボボックスの下に”フィルタの解除”ボタンを作成し、このボタンをクリックするとフォームのフィルタが解除され、コンボボックスには”すべて”と表示される。 という方法はいかがでしょうか? 必要であれば追記させていただきます。m(__)m

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.2

クエリの抽出条件に関数を使って条件を書けばできます。 例えば  A  B  石川  100 東京  200   沖縄  150 すべて 999 と"すべて"のBに入る値を決めてそのコンボボックス名を「Cmbo1」として 「Cmbo1」に入る値がBの値であれば 抽出条件に =IIf([Cmbo1]<>999,[Cmbo1],Is Not Null) で「Cmbo1」の値が999以外であれば「Cmbo1」に入った値で抽出、999であった場合 は抽出するテーブルの抽出条件を書いたフィールド(B)が空白でないレコードが抽出 されます。 「Cmbo1」に入る値が"すべて"であれば999のところを"すべて"にすれば大丈夫です。

yy10
質問者

補足

少しわかりずらかったかも知れません。少し補足します。 クエリーで A  B  石川  100 東京  200   沖縄  150 となっています。今度はコンボを使わず簡単にクエリーの抽出条件に[]と入れるとクエリーを開くとパラメータの入力ときいてきますね。例えば”石川”と入力すれば 石川  100 と表示されます。そういうクエリーでパラメータに”すべて”と入れると 石川  100 東京  200   沖縄  150   と表示させていのです。o cyanさんの解説だとクエリーに”すべて 999” というレコードを挿入しないといけないようなのですがこのクエリーには入れられません。 私の解釈違いでしょうか。 超初心者なもので的がはずれているかも知れません。ご指導お願いします。

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

コンボボックスのイベントハンドラChangeで、「全て」を選んだ場合に、制約条件を付けず(例えば、プロパティfilterをクリアするとか。)に、requeryするという封にプログラミングするとか。 filterの記述を、 "[都道府県]='" & Me![都道府県] & "' or " & IIf( Me![都道府県]="全て", "True", "False" ) ――のようにするとか。

関連するQ&A