• ベストアンサー

accessでコンボボックスの内容を変える方法を教えて下さい。

accessのフォームにてデータ入力画面を作成しています。 フィールド入力にコンボボックスを用いてリスト選択にしたいのですが、リストの量が膨大になってしまう為、その前のフィールド値によってリスト用テーブルを切り換えて使いたいと思っています。簡単に出来る方法があれば教えて下さい。

  • onken
  • お礼率82% (39/47)

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

  • ベストアンサー
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

えっと、問題を具体的にするために、以下のような設定だと仮定して話を進めます。 ご自身の環境と置き換えてお読みください。 ・数千種類の商品の中から、任意の一つを選択したい。 ・「T商品」テーブルには、次のフィールドがある。   [商品ID],[商品名],[商品分類](テキスト型) ・フォーム上に、コンボボックス「コンボA」と「コンボB」がある。 ・「コンボA」にて商品分類を選択し、コンボBに表示される商品を絞り込む。 ・「コンボB」で商品IDを指定する。 ****** 1:コンボA と、コンボBをフォームに配置。 2:コンボA のプロパティ   名前:コンボA   コントロールソース:空白(非連結)   値集合タイプ:テーブル/クエリ   値集合ソース:SELECT 商品分類 FROM T商品 Group By 商品分類; 3:コンボBのプロパティ   名前:コンボB   コントロールソース:商品ID   値集合タイプ:テーブル/クエリ   値集合ソース:空白   入力チェック:いいえ 4:コーディング Private Sub コンボB_Enter()   Dim strRowSource As String   If Nz(Me.コンボA, "") = "" Then     strRowSource = "SELECT 商品ID FROM T商品;"   Else     strRowSource = "SELECT 商品ID FROM T商品" _     & " WHERE 商品分類 ='" & Me.コンボA & "';"   End If   Me.コンボB.RowSource = strRowSource End Sub なんかあったら、補足してください。

onken
質問者

補足

回答ありがとうございます。 申し訳ありませんが私ACCESS初心者の為、VBAではなくてクエリで実現する方法があれば教えていただきたいのですが。 でも、これを機会にVBAの勉強をしたいと思いました。 よろしくおねがいします。

その他の回答 (3)

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.4

>申し訳ありませんが私ACCESS初心者の為、VBAではなくてクエリで実現する方法があれば教えていただきたいのですが。 クエリーでするなら、コンボBの値集合ソースの内容を、 SELECT 商品ID FROM T商品 WHERE 商品分類 = Forms![フォーム名]![コンボA] みたいな感じのクエリーにして下さい。 参考までに、手順を書いときます。 1:下記1-A,1-Bのいずれか一つを実行する 1-A:上記SQL(SELECT云々の部分のこと)のテーブル名等を、テキストエディタで変更した後、コンボBの[値集合ソース]プロパティに貼り付ける 1-B:テーブル名等を変更した後、クエリーを新規作成して、[表示]-[SQLビュー]を実行し、そこに貼り付ける。*1 クエリーを保存し、コンボBの[値集合ソース]に、そのクエリーを指定する。 *1貼り付けた後、[表示]-[デザインビュー]で普通のクエリーの表示に戻ります。編集も可能です。 2:マクロを新規作成   アクション:再クエリ     コントロール名:コンボB 3:コンボBのプロパティの変更   フォーカス取得時:「2:」で作成したマクロの名前 以上。これで、絞り込み機能が実現できる筈です。 ついでに、VBAでする時の方法も。 ・フォームをデザインビューで開き、[表示]-[コード]を実行。 出てきた画面の最下行に、#3でのコードを貼り付ける。 フィールド名や、テーブル名は、適宜書き換える。 クエリーとVBAの動作の違いですが、クエリーを使った場合、コンボAが空白の時に、コンボBを展開しても何も表示されませんが、#3でのVBAの場合、コンボAが空白の時には、商品が全件表示されるようになっています。(このように、いろんな条件に応じて、様々な処理が出来るのが、VBAの強みです。)

onken
質問者

お礼

補足回答ありがとうございます。 色々試してみたのですが、クエリだとタイミングの問題が発生しそうだったのでコンボBのプロパティのイベント/フォーカス獲得時に前回教えて頂いたプロシージャを組み込みました。 その結果みごと思ったような入力画面が出来ました。 色々とありがとうございました。

  • katuya
  • ベストアンサー率33% (38/115)
回答No.2

基本的なところはわかっているものとして回答します。 コンボボックスA「cmb_a」で大項目を選んだ後、 コンボボックスB「cmb_b」に反映させると仮定します。 コンボボックスBはq_tmpを参照しています。 もっとよいやり方があるかとは思いますが。 --------------------------------------------- Private Sub cmb_a_AfterUpdate() '一時的にクエリー[q_tmp]を作ってcmb_bに反映 Dim qdf As QueryDef Dim strSQL As String strSQL = "SELECT code, name FROM テーブル名 WHERE code = '" + cmb_a + "';" DoCmd.DeleteObject acQuery, "q_tmp" '前回作成したクエリーを削除 Set qdf = CurrentDb.CreateQueryDef("q_tmp", strSQL) '新しい条件でクエリーを作成 DoCmd.Requery "cmb_b" 'コンボボックスBを更新 End Sub --------------------------------------------- ※実行の前にダミーの[q_tmp]を作成しておいてください。 (内容はなんでもよい) わからなければ補足してください。

onken
質問者

補足

回答ありがとうございます。 申し訳ありませんが私ACCESS初心者の為、VBAではなくてクエリで実現する方法があれば教えていただきたいのですが。 よろしくおねがいします。

  • ponpon
  • ベストアンサー率19% (67/345)
回答No.1

"その前のフィールド値"用のコンボボックスを作り、リスト用コンボボックスと連結させます。 プロパティで連結数を入力してください。 この場合、"その前のフィールド値"=0、リスト用コンボボックス=1となります。

onken
質問者

補足

回答ありがとうございます。 私ACCESS初心者の為、もう少し詳しく教えていただきたいのですが。 出来ればクエリで実現する方法をお願いします。

関連するQ&A

  • accessのコンボボックスのことで質問です。

    accessを勉強しているのですが、ちょっとしたことで分からなくなってしまいました・・。 質問の内容なのですが、まずフォーム上にコンボボックスAとコンボボックスBを配置するとします。 レコードソースには仮に[情報テーブル]というテーブルが選択されているとします。 コンボボックスAには[情報テーブル]のフィールド名が、 例えば[顧客NO]、[商品]、[値段]というフィールド名が入っているとし、フィールドにはそれぞれ10件ずつデータが入力されています。 そしてコンボボックスAで[顧客NO]を選択するとコンボボックスBに[顧客NO]の10件のデータが挿入され、選択できるようにしたいのです。 他のフィールド名を選んだときにも同じようにコンボボックスBにフィールドのデータが入るようにしたいと思っています。 コンボボックスAにテーブル名を入れることはできたのですが、 コンボボックスAで選択されたフィールドのデータを、コンボボックスBで選択できるようにするというやり方がわからないのです・・。 accessは2002を使っています。 よろしくお願いします。

  • コンボボックスの値が消えてしまいます。

    コンボボックスの値が消えてしまいます。 フォーム(1)にコンボボックスA(値集合ソースはテーブル1)があります、この リスト外入力時で別フォーム(2)(レコード追加用)を開きテーブル1にレコードを追加、 フォーム(2)を閉じる時にコンボボックスAをリクエリかけてフォーム(1)に戻るとコンボボックスAが空になっているのでリストを開き選択し直さなければいけません! フォーム(1)に戻った時コンボボックスAに入力した値を選択させておくにはどの様にすれば良いか アドバイスよろしくお願いいたします。 WIN XP ACCESS 2003で作成しています。

  • Access コンボボックスの複数選択

    Access2007を勉強中の初心者です。 「空白のフォーム」から作成したコンボボックスで、複数選択が可能になるような設定はありませんか? テーブル項目の「ルックアップ」「複数の値を許可」を許したテーブルから作成したフォームでは、コンボボックスで複数の値を選択可能になりますが、「空白のフォーム」から作成した場合にはできないのでしょうか。 リストボックスではスペースをとってしまう為、コンボボックスで行いたいです。 言葉足らずな内容かもしれませんし、大変お手数をおかけしますが、よろしくお願いいたします。

  • access,フォームで最新のコンボ内容が反映不可

    フォーム入力時、顧客や商品データが無い場合、フォームを開いたままで、そのテーブルを開き、顧客や商品データを入力、閉じます。 フォームでは、顧客や商品データはコンボボックスで選ぶ用にしていますが、それにテーブルに新たに入力したそのデータが出てきません。 フィールド→更新、やフォームを閉じ開きすれば、現れます。 これを、例えばボタンを作成し、テーブルにデータ追加後、ワンクリックで、フォームのコンボボックスに新入力データを反映させるにはどうすれば良いのでしょうか(SQLの方が良いか?)。 また、フォームのコンボボックスのデータは、フォームを開いた時のテーブルやクエリのデータそのままで、コンボボックス選択時に再読み込みなどはしないのでしょうか? 正確にはコンボボックスのデータは順の関係でクエリで整順させたものです。 access2000でwindows2000です。 宜しくお願いいたします。

  • ACCESS97のコンボボックスについて

    入社して、名刺を貰う機会が多い為、名刺を管理するものを初歩的な参考書を見てACCESS97で作りたいと思います。テーブルで数名の氏名・会社名・部署名・役職・住所を作りました。良く分からなかったので、この1つのテーブルを基にパラメータを使って検索する「検索用画面」と新しいレコードが表示される「新規入力画面」をクエリーとフォームを別々に作りました。検索用画面は、これで良しとします。しかし、新規入力画面は、同会社名が多いので、コンボボックスを作り今まで登録したものからも選べる様にもしたいです。新しいレコードでは、表示されませんが、▼で前のレコード(既に入力してあるデータ)に戻ると、エラーメッセージで「このフィールドに入力した値が不正です。例えば、数値型のフィールドに文字列を入力しました。」と出てきてしまいます。コンボボックスいうのは、コンボボックスウィザードで「テーブルまたはクエリーを表示する」を選び、表示させたいものを選ぶだけでは、いけないのでしょうか・・。くだらない質問で申し訳ありませんが、回答の方宜しくお願いします。

  • Access コンボボックスの絞り込み後の表示

    Access2002を使用しております。 コンボボックスAに連動したデータを絞り込みさせるコンボボックスBがありますが、一旦入力後は、コンボボックスAの値にかかわらずコンボボックスBに入力したデータを表示させるにはどうしたらよいでしょうか? 例として、次の3つのテーブルを基にデータベースを作成しております: メインテーブル フィールド名: ID 社名 担当者 社名テーブル ID   社名   住所 etc... ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 1    A社 2    B社  担当者テーブル ID   社名ID   担当者名  電話番号 etc... ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ 1    1      木村 2    2      佐藤 3    1      田中 4    2      斎藤 メインテーブルを基にしてフォームを作成し、 「メイン」というフォーム名にして 「社名」「担当者」をフィールドのコントロールをコンボボックスに変更しました。 「社名」フィールドの値集合ソースを「社名テーブル」から引き出し SELECT [社名テーブル].ID, [社名テーブル].社名 FROM 社名テーブル; 列数2  で設定し、社名をコンボボックスで選択できるようにしました。 そして 「担当者」フィールドの値集合ソースを「担当者テーブル」から引き出し SELECT 担当者テーブル.ID, 担当者テーブル.担当者名, 担当者テーブル.社名 FROM 担当者テーブル WHERE (((担当者テーブル.社名)=forms!メイン.社名)); で設定しました。 「社名」フィールドの「更新後処理」で Private Sub 社名_AfterUpdate()     Me!担当者.Requery End Sub を設定しました。 「メイン」フォームをフォームビューで開き、「社名」コンボボックスで「A社」を選択すると 「担当者」コンボボックスで「木村」と「田中」が表示されるので、「木村」を選択します。 次のレコードに移り、「社名」コンボボックスで「B社」を選択すると 「担当者」コンボボックスで「佐藤」「斎藤」が表示されるので、「佐藤」を選択します。 さて、「佐藤」を入力した時点で、前のレコード(「A社」「木村」を選択)に戻ると 「担当者」欄が空欄で表示されます。 メインテーブルには全てデータは入力されています。 データ入力時は「担当者」コンボボックスは「社名」コンボボックスで選択した値に連動させたいのですが、 このようにデータ入力済みの場合は 最初のコンボボックスの値にかかわらず(この場合は直近に選択した社名がA社・B社のいずれかであろうとも) 入力済みのデータ(「木村」「佐藤」)がフォームに表示されるようにしたいのですが 何か良い方法はないでしょうか? 出来れば入力専用と読み取り専用のフォームを2つ使用するのではなく、1つのフォームで事足りればありがたいのですが・・・

  • Accessのコンボボックスの値が消える

    お伺いいたします Accessのフォーム(フォーム請求実績)上に置いたコンボボックスで ユーザーリスト(テーブル)から目的のデータを 選択出来るように設定していますが、 目的のデータをクリックすると、コンボボックスに一瞬、表示された後、消えて空欄になります。 目的のデータ(販売先名)で販売実績表(クエリ)の中の販売先別のデータを抽出(Filter)させていますが目的のデータの抽出はできるのですが、 コンボボックスの表示が消えるので困っています。 因みに、請求実績データ(選択クエリ)の販売店フィールドの抽出条件欄には [forms]![フォーム請求実績]![コンボボックス1]で 抽出するようにしています。 ぐだぐだと長い説明で解りにくいと思いますが要は コンボボックスのデータを選択してもコンボボックスに表示されないのです。 こんな経験された方よろしくアドバイスお願いいたします。

  • アクセスでコンボボックスに表示されるリストの順番が狂ってしまう!

    アクセスでコンボボックスに表示されるリストの順番が狂ってしまう! アクセスのフォームでコンボボックスを使用しています。コンボボックスで表示されるデータは他のテーブルの値を表示させているんですが、その値が勝手に昇順?に並べ替えられてしまい困っています。テーブル作成時に入力した順番か、もしくは任意に表示させる方法はないでしょうか? ちなみにアクセス2000です。どうぞよろしくお願いいたします。

  • Accessのコンボボックスでリストが選択できない

    いつもお世話になっております、ありがとうございます。 コンボボックス1で部署名を選択し、 コンボボックス2でその部署の社員の名前を選択するようなフォームがあります。 コンボボックス1の値集合ソースで社員テーブルの一覧を参照し、 部署名のフィールドでグループ化して選択できるようになっています。 このとき、なぜかコンボボックス2では最上段にリスト化された社員名しか 選択できなくなります。 画面上では全員がリストとして見えているのに、 リストの2番目以降をクリックしても、一番上の社員しか入力されません。 プロパティで何か変な制約がかかっているのでしょうか? どなたかお分かりになる方がいらっしゃいましたら教えてください。 どうぞよろしくお願いします。

  • 困ってます!Accessフォームのコンボボックス

    初心者です。とーっても困っています・・・。 顧客データを登録しているのですが、テーブルを元に登録フォームを作成しました。 商品がたくさんあって、4つのコードに分かれています。フォームの中に[A][B][C][D]と4つのコンボボックスを作成し、絞込み検索ができるようにはしました。 が、しかし、選んだデータがテーブルに表示されません。例えば[A]のコンボボックスの中から[1010]を選択、テーブルを見ると、他のテキストボックスに入力した情報は保存されているけど、コンボで選んだデータは空白です。 誰か助けてください!!よろしくお願いします。

専門家に質問してみよう