• ベストアンサー
  • 困ってます

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

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

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数1108
  • ありがとう数2

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

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

えっと、問題を具体的にするために、以下のような設定だと仮定して話を進めます。 ご自身の環境と置き換えてお読みください。 ・数千種類の商品の中から、任意の一つを選択したい。 ・「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 なんかあったら、補足してください。

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連する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 コンボボックスの絞り込み後の表示

    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つのフォームで事足りればありがたいのですが・・・

その他の回答 (3)

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

>申し訳ありませんが私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の強みです。)

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

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

基本的なところはわかっているものとして回答します。 コンボボックス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]を作成しておいてください。 (内容はなんでもよい) わからなければ補足してください。

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

関連するQ&A

  • ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使っ

    ACCESSでコンボボックスからの入力でリスト外の追加をフォームを使って登録 ACCESSのフォームを使ってデータ入力を作成しています、"顧客名"をコンボボックスを使って選択するようにしていますが。 リスト外の新規顧客を入力する際には別の"顧客登録"フォームが開いて、顧客情報(読み仮名、顧客名、都道府県コード、所在地)を入力して、閉じると登録した"顧客名"がコンボボックスから選択できるようにしたいと思い、マクロを使用して(VBはよくわからないので) イベント→リスト外入力時→”顧客登録”フォームが開く 必要事項を入力し、閉じるボタンをクリック。 してみたのですが、コンボボックスのリストに先に入力した新規データが出てきません。 何が足りないのかご教授お願いいたします

  • [Access2003]コンボボックスのプロパティの「値集合タイプ」について

    [Access2003]コンボボックスのプロパティの「値集合タイプ」について 今、参考書でAccess2003のフォームのコントロールの作成について勉強しています。『コンボボックスのプロパティ』の「すべて」の中の「値集合タイプ」の・・・・ 「テーブル/クエリ」、「値リスト」、「フィールドリスト」は、少しの説明だけで理解できなかったです。 Access初心者なので簡潔に「テーブル/クエリ」、「値リスト」、「フィールドリスト」を教えてくださったら助かります。

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

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

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

    Accessコンボボックスで選択した番号に連動する名前を他のフィールドへ表示する方法 Access初心者です。 どなたか方法をご存知の方がいらっしゃいましたら、お手数ですがご教授願います。 何分初心者なので、お手数ですが、噛み砕いてお教え頂けると助かります。 請求書の作成フォームを作っています。 フォーム上に[取引先名」という、コンボボックスを配置しています。 そのコンボボックス上から名前を選択できるようにしています。 作成済の請求書を名前別に検索できるようにパラメータクエリを作成して、あいまい検索?(Like検索)で 検索した名前に該当する請求書を抽出できるようにしたいと思っています。 実際にパラメータクエリを作成してみましたが検索結果0件で表示されてしまいます。 その際に作成したものは、「取引先名」フィールドの抽出条件に、Like"*"&[取引先名を入力して下さい]&"*" です。 これで駄目だったので、次に Like"*"& &"*"を削除して、[取引先名を入力して下さい」だけで作成してみましたが 取引先名で検索すると、検索結果は0件でした。 取引先IDで検索すると検索できましたが、何が駄目だったのかがさっぱり分かりませんでした。 説明下手で申し訳ありませんが、どなたかご存知の方がいらっしゃいましたら教えて下さい。

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

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

  • Accessレポートでコンボボックスが動かない

    Access2010のレポートでコンボボックスを使いたいのですが、コンボボックスが正しく表示されず困っています。 表示されないというのは、コンボボックスのリストを選択する逆三角形が表示されず、またリストも全く表示されません。つまりテキストボックスのように空のの四角い箱が表示されてしまいます。 表示したいリストはあるテーブルから引っ張っているのですが、全く同じことをリストボックスでやろうとするとすべての項目がうまく表示できることは確認しました。 またフォームの方ではコンボボックスをから項目が選択できることも確認できています。 レポートではコンボボックスが使えないような仕様になっているのでしょうか? お分かりになる方教えていただけますでしょうか?

  • Accessのコンボボックスのデフォルト表示

    Access初心者です。 フォームのコンボボックスですが、ウェブフォームでよく見られるように、未選択時に「---選択してください---」というコメントを表示できないでしょうか。 「---選択してください---」はデータとして入らないような解決法でお願いします。 VBAでMe!コンボボックス名.Value = "AAA"というふうにやってみましたが、どうもValueはテーブルのデータ型と同じでないとダメみたいです。テーブルの当該フィールドには例えば都道府県IDのように、数値だけしか格納しない予定ですので、これでは「このフィールドに入力した値が正しくありません」というエラーが出ます。 なお使っているのは2013です。いい解決法がないでしょうか。よろしくお願いたします。

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

    ACCESSのフォームで、コンボボックスによる入力をするところがあるのですが、ここで、前回選択(または入力)した値を次に入力するときの既定値にすることは可能でしょうか。可能でしたら、その方法を教授ください。

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

    お世話になります。 Access2002でフォームを作成しているのですがコンボボックスを使用する際VBAで項目を登録、入力不可にして選択のみできるようにできないのでしょうか? VBAではなくVB6のコンボボックスの場合Styleプロパティに 2(ドロップダウンリスト)を設定したら可能なのですがAccess2002のコンボボックスにはStyleプロパティがありません。 また、ほかの方法が在れば教えていただけませんでしょうか? 以上、よろしくお願いします。

  • コンボボックス

    お世話になっております 既存のデータベースからaccessを使って検索を行っている者です 表示させるテーブルの中でひとつだけ 5パターンの文字列が入力されているフィールドがあります それをフォームで表示する際にコンボボックスで表示させたいのですが どのようにすればよいのでしょうか? コンボボックスを作るときフィールドを割り当てると 同じ入力内容も全て表示されてしまってものすごい量になってしまいます これを5種類のいずれかを選択させる形で表示させたいです あと、入力されている内容とは別のものを表示したいのです たとえば フィールドの内容は G1,G2,G3,G4,G5 だとして G1だったら「印刷」 G2だったら「表示」 というような表示をさせたいと思っています ご存知の方よろしくお願いいたします