同一値集合ソースの複数コンボボックスでプルダウンメニューに既入力値を再表示させない

このQ&Aのポイント
  • Access初心者が、複数のコンボボックスで同じ値集合ソースを参照して入力をしたいが、重複を避けたいという問題について相談しています。
  • コンボボックスの抽出条件を設定しても、一度入力した値を削除して再入力するとリストボックスが表示されないという問題が発生しています。
  • 解決策を求めているAccess利用者が、設定の不足や論理上の考え残りを疑っており、解決方法を教えてほしいと述べています。
回答を見る
  • ベストアンサー

同一値集合ソースの複数コンボボックスでプルダウンメニューに既入力値を再表示させない

まだ6ヶ月程度のAccess初心者です。データ入力上の誤入力を避けたいのですが方法がわからず悩んでいます。初心者で、未だ基本的な理解ができていないためだと思いますが、どなたか解決法をご教授いただければありがたく存じます。  1つのフォーム上に複数のコンボボックスを用意して、同じ値集合ソース(テーブル)を参照して入力をしようとしています。  このとき、まず、コンボボックス1に、参照しているテーブルから”DATA1”という値を入力したとき、次のコンボボックス2のプルダウンメニューには、先の”DATA1”を表示しないように、SQLステートメント:クエリビルダの抽出条件を設定しようと考えています。  このフォームにはコンボボックスを全部で4つ用意して、順次入力の都度、入力済みのデータはプルダウンメニューに表示しないようにし、重複を避けたいというのが目的です。    コンボボックス2の値集合ソースとして設定する際に、SQLステートメント:クエリビルダの抽出条件に記載したものは次のようなものです。 <>[Forms]![フォーム1]![コンボボックス1]  And  <> [Forms]![フォーム1]![コンボボックス3]  And  <>[Forms]![フォーム1]![コンボボックス4]  ほかのコンボボックス3~4にも、自分以外のコンボボックスと重複させないつもりで、それぞれ抽出条件を入力しました。  さて、実際にこれで動かしてみると、1回目はうまくいって喜んだのですが、入力値をDeleteして再入力を試みたところ、リストボックスが何も表示されない状態になり、悩んでいます。  何か設定上で不足している、あるいは論理上で考え違いをしているのだと思いますが、何とか解決したいと切に思っています。何卒よろしくお願いします。

  • 2767
  • お礼率71% (5/7)

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.1

[フィールド名]<>[Forms]![フォーム1]![コンボボックス1] は、[コンボボックス1] が空白の場合に True でも False でもなく Null になります。 Null と ある値の And 演算の結果は Null になります。 (VBE のヘルプで「And 演算子」を調べてください。) よって、1つでも未入力のコンボボックスがあると 抽出条件に 「Null」 と書いたのと同じことになってしまいます。 これを回避するには、空白の場合に Null にならないように Nz 関数を使います。 <>[Forms]![フォーム1]![コンボボックス1] を <>Nz([Forms]![フォーム1]![コンボボックス1] ,"") のようにしてください。 Nz 関数についてもヘルプで調べてください。 なお、入力するたびに、コンボボックスのリストが変化するように、 下記のような、再クエリの処理が必要なのは、言うまでもありません。 念のため。 Private Sub コンボボックス1_Enter()   Me.ActiveControl.Requery End Sub

2767
質問者

お礼

bonaron様 さっそく解決の方法をご教示いただき、大変ありがとうございました。 ご紹介いただいた方法を適用し解決いたしました。レコードを移動しても、途中でdeleteしても問題なく目的としていた形に到達することができました。本当にありがとうございます。  Nz関数については以前、表の集計を取る際にnullを0(ゼロ)に置き換えてから合計するという内容を学習したことがありましたが、こういう場合も必要だということを改めて理解しました。null値の扱いについては今後も要注意ということで頭に入れておきます。  再クエリについては、コンボボックスのイベントプロパティ「フォーカス喪失時」に、コンボボックスごとに再クエリマクロを設定してみました(まだ理解が足りないので試行錯誤ですが…)。  ありがとうございました。またよろしくお願いいたします。

関連するQ&A

  • Accessのテキストボックスとコンボボックスの違い

    フォームにテキストボックスを3ケ用意し、テキストボックス名をtxt1,txt2,txt3としました。これにコマンドスイッチを作成し、機能を再クエリと設定しました。 フォームのサブフォームに再クエリの結果を表示するようにしました。 クエリのテキストボックス1の抽出条件は 条件  [Forms]![フォーム名]![txt1] または [Forms]![フォーム名]![txt1] Is Null    [Forms]![フォーム名]![txt1] Is Null テキストボックス2の抽出条件は 条件  [Forms]![フォーム名]![txt2] Is Null または [Forms]![フォーム名]![txt2]  [Forms]![フォーム名]![txt2] Is Null テキストボックス3の抽出条件は 条件  [Forms]![フォーム名]![txt3] Is Null または [Forms]![フォーム名]![txt3] Is Null [Forms]![フォーム名]![txt3] と設定し、テキストボックスにデータを入力し実行すると 正しい結果が得られるのですが、テキストボックスをコンボボックスに変更し、コンボボックス名をtxt1,txt2,txt3 とすると、抽出されません。 コンボボックスをテキストボックスのように扱うのには どうするのでしょうか。教えてください。

  • Access2003フォームでコンボボックスの内容が消える。

    こんにちは。 Access2003について質問させてください。 フォームにコンボ[1]コンボ[2]コンボ[3]があり [1]の選択結果によって[2]、[2]の選択結果によって[3]の内容が変わるように SQLステートメントの抽出条件に[forms]![フォーム名]![○○○]で設定をしています。 これで、テーブルにはきちんと入力データが保存されているのですが、 次回フォームを開いたときにコンボ[2][3]が空欄になっています。 どうしてなのでしょうか? フォームにも表示させておく方法があれば教えて下さい。

  • Access2003でコンボボックスからデータを抽出したい

    自己啓発でAccess2003を勉強しています。 Access2003でコンボボックスで名前を選択して、データ(住所)を抽出したものをリストボックスに表示させたいのですがどこがまちがっているかわかりません。こんなことで3週間ぐらい悩んでいます。 回答またはアドバイスをお願いします。 もしくはもっと簡単なやりかたがあればお願いします。 (1)「氏名」、「住所」のテーブルを作成。テーブル名は「01データ」 (2)「氏名」、「住所」のクエリを作成。クエリ名は「クエリ1」 (3)フォームでコンボボックスとリストを作成。フォーム名は「印刷」 ⇒コンボボックスの名前は「検索」。 ⇒値集合ソースはSELECT [01データ].ID, [01データ].氏名 FROM 01データ; これで「氏名」が選択できた。 (4)クエリの「氏名」抽出条件にLike [forms]![印刷]![検索] (5)検索するマクロを作成。マクロ名「M検索」 アクションは 全レコードの表示 フィルタの実行 ⇒Where条件は[Forms]![印刷]![検索]=[クエリ1]![氏名] (6)マクロ「M検索」をコンボボックスのプロパティ「イベント」タブから変更時に設定する。 (7)フォーム「印刷」を開き、コンボボックスで氏名を選択すると『クエリ1!氏名』と表示されてしまいます。 (8)フォーム「印刷」のリストボックスは全レコードが表示されている。

  • access クエリコンボボックスについて

    フォームのメニュー画面でレポート印刷ボタンを作りました。 印刷ボタンを押すと[抽出する都道府県は?] とパラメーター入力が表示されるようにしてあるのですが、 それを入力式ではなく、コンボボックスにして選択式にしたいのですが、 どのようにすれば良いのでしょうか? コンボボックスにマクロをつけて クエリの抽出条件のところに[forms]![フォーム名]![コンボ名] を入力しても、実行したときになにも抽出されません。 なにがどのように違っているのでしょうか? 説明が分かりにくくて申し訳ないのですが、 わかる方いらっしゃいましたらぜひ教えていただきたいです。 よろしくお願いいたします。

  • クエリの抽出条件

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

  • コンボボックスの抽出条件のLikeについて

    フォーム内のコンボボックス処理について 現在ACCESS2002でDBを構築しております。 初心者です。 フォーム内でテキストボックスから値【a】をもらい、その【a】を抽出条件として抽出結果を コンボボックスに表示したいと考えております。 ※like関数を使用 Private Sub テキスト1_AfterUpdate() DoCmd.Requery "コンボ1" Me!テキスト1.Requery End Sub コンボボックスの値集合ソースの抽出条件で ((テーブル.カラム) like "'*" & Forms!フォーム!テキスト1 & "*'") 上記で指定したのですが、何も抽出されません。 イコールで下記を実行すると値は抽出されます。 ((テーブル.カラム) = Forms!フォーム!テキスト1 ) LIKE関数の使い方が悪いのでしょうか。 お手数ですが、ご教授願います。

  • アクセス、コンボボックスの値集合ソースについて

    アクセスフォームでコンボボックスコントロールを使用しています。 クエリを使ってコンボボックス内の値を動的に変えたいと思っています。 図のように他のコントロール値を参照するようにすると【製薬メーカCD】がすっぽりすけてしまいます。 (本来4つ分のデータが出るはずなのに3つしかでない) しかし値を直接入力するとちゃんと4つ分のデータが取得できています。 どこがおかしいのでしょうか?? ご教授お願いします。

  • Accessのコンボボックスの設定について(値集合ソース)

    フォームのコンボボックスに表示させたい値を 値集合ソースにてSQLを直接書いています。 例を挙げますと、 テーブル:CstmTBL 項目:Cstm_ID,Cstm_Name,FLG 値集合ソース:SELECT Cstm_ID FROM CstmTBL Where FLG = '1' ここまでであればうまくいきます。 私がやりたいのは、 このFROM句のテーブルを上位(例えば上位のコンボボックスで指定したテーブル名)で設定し、 そこで設定されたテーブルを毎回そのSQLに埋め込んで抽出されるようにしたいのですが、うまくいきません。VBAを書かないとだめでしょうか? 書くとすれば、書き方も教えていただけますか? よろしくお願いいたします。

  • Access コンボボックスについて

    フォーム1の中にコンボボックス1、 検索結果用のサブフォームを作りました。 コンボボックス1は日付抽出用で、 プロパティは 値集合タイプ・・・テーブル/クエリ にしてあり、 2005-01  ・  ・  ・ 2005-12 となります。 「すべて」検索したいときには、どのように設定したら 良いのかを教えていただけないでしょうか? よろしくお願いします

  • ACCESS2000フォームでコンボボックスを使ったクエリーを作成したい

    ACCESS2000でデータベースを作成しています。 どなたか教えてください!! 検索フォームというのを作り、そこには「部」「課」「掛」を 選択できるようにテーブルを参照してコンボボックスを作成しました。 それぞれの項目を選択した後、「検索」ボタンを押すと コンボボックスから選んだ値と一致するレコードだけを抽出して表示させたいんです。 クエリは何となく作ったのですが、現在は全てのデータが抽出されてしまいます。 条件を一切入力していない状態なんです。 検索条件に"総務部"などと入力すればそのデータだけ抽出 されるようにはなっています。 でも、でも・・・「コンボボックスで選んで値と一致したら」抽出っていう条件をどうやって設定していいかわからないのです。 どうぞよろしくお願いします。