こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

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

投稿日時 - 2002-09-25 22:31:26

QNo.366614

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.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という
フィールドに石川というレコードがあるんですよね。
フォームから値を持ってきて抽出条件に入れるという事を前提に回答したのですが
違うのでしょうか?

投稿日時 - 2002-09-30 09:58:23

補足

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

投稿日時 - 2002-10-02 20:11:11

ANo.4

コンボボックスに表示されるのが
 A  B 
石川  100
東京  200
沖縄  150
と思っていました。
テキストボックスやコンボボックスの値でクエリでA・Bのレコードを抽出すると
いう事ですね。
コンボボックスでと始め見たのでコンボボック内に表示される内容で"すべて"を
追加してと言う意味で始めに回答してしまいました。

それでも同じようにできますけど。
コンボボックスで選択もしくは入力してクエリで抽出するには
=IIf(フォーム名![Cmbo1]<>"すべて",フォーム名![Cmbo1],Is Not Null)
で出来ます。しかし"すべて"以外の"全て"では抽出できません。空のクエリの結果
になってしまいます。
テキストボックスから抽出する場合は(テキストボックスをText1として)
=IIf(フォーム名![Text1]<>"すべて",フォーム名![Text1],Is Not Null)
で大丈夫です。これも"すべて"以外の"全て"は同様の結果になります。


それと記述内のフォーム名を書き忘れてしまいました。ゴメンナサイ。

投稿日時 - 2002-09-27 10:10:45

補足

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

投稿日時 - 2002-09-27 23:27:26

ANo.3

こんにちは。

クエリやテーブルを元に表形式のフォームを作り、このフォームに県名を選択できるコンボボックスを作成しておく。
フォームを開いたときには、コンボボックスには、”すべて”と表示されており、
---以下はVBAの処理になりますが、---
コンボボックスで県名を選択すると県名でフォームにフィルタをかける。
コンボボックスの下に”フィルタの解除”ボタンを作成し、このボタンをクリックするとフォームのフィルタが解除され、コンボボックスには”すべて”と表示される。

という方法はいかがでしょうか?

必要であれば追記させていただきます。m(__)m

投稿日時 - 2002-09-27 09:56:41

ANo.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のところを"すべて"にすれば大丈夫です。

投稿日時 - 2002-09-26 11:19:17

補足

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

投稿日時 - 2002-09-26 21:37:51

ANo.1

コンボボックスのイベントハンドラChangeで、「全て」を選んだ場合に、制約条件を付けず(例えば、プロパティfilterをクリアするとか。)に、requeryするという封にプログラミングするとか。

filterの記述を、

"[都道府県]='" & Me![都道府県] & "' or " & IIf( Me![都道府県]="全て", "True", "False" )

――のようにするとか。

投稿日時 - 2002-09-26 07:13:15

あなたにオススメの質問