Accessフォームで大分類から小分類を選択する方法とは?

このQ&Aのポイント
  • Access初心者がフォーム上で大分類から小分類を選択する方法について詳しく教えてください。
  • Accessのコンボボックスを使用して都道府県の選択によって市区町村の選択を制限する方法を教えてください。
  • Accessのフォームで都道府県のコンボボックスを作成する際、重複した都道府県名が表示される問題について解決方法を教えてください。
回答を見る
  • ベストアンサー

Accessフォーム 大分類→小分類を選択したい

Access初心者です。 ほかの類似の質問を検索して試してみたのですが、 どうしても同じようにできません。 もう1週間も同じところでつまづいています。 どなたか、初心者にもわかるように教えていただければ幸いです。 以下のようなテーブルがあるとします。 [都道府県] [市区町村] 東京都  新宿区 東京都  港区 東京都  渋谷区 神奈川県  横浜市 神奈川県  川崎市 神奈川県  藤沢市 埼玉県  さいたま市 埼玉県  熊谷市 埼玉県  三郷市 フォーム上で、 [都道府県]のコンボボックスで東京都を選んだ場合、 [市区町村]のコンボボックスには「東京都」の市区町村名が 選択できるようにしたいのですが、 一番最初のところで行き詰っています。 コンボボックスウィザードにしたがって [都道府県]のコンボボックスを作成すると、 [東京都] [東京都] [東京都] [神奈川県] [神奈川県] [神奈川県] … というリストが出てきてしまいます。 過去の質問を検索し、プロパティの値集合ソースで、 SELECT[都道府県]…FROM[テーブル名]の後に、 GROUP BY[都道府県]と書き加えたのですが、 こうするとリストが出てこなくなります。 いったいどうしたらよいのでしょうか。 ほとほと困っています。 どうかご教示ください。お願いいたします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.6

ごめんなさい。暑さで脳の中が煮えくり返り、 大間違いをしでかしていました。 更新後処理ですから、 Private Sub cmb都道府県_AfterUpdate() Me!cmb市区町村.Requery End Sub です。 cmb都道府県_BeforeUpdate(Cancel As Integer) ではありませんでした。 それから、 >FROM句の構文エラーです これは、テーブル名と値集合ソースの中のテーブル名に 違いが存在する可能性があります。 念のために、cmb都道府県とmb市区町村の値集合ソースの 実際のデータをコピーして示してもらえますか。 結構重要なところなので最後までつきあいます。 http://oshiete1.watch.impress.co.jp/qa5995365.html このぐらいの長さなら大丈夫です。

20110704
質問者

お礼

最新のご回答にもうお礼をつけられなくなってしまったので、 こちらに改めてお礼を書かせていただきます。 piroin654さま、本当に本当にありがとうございました。 顔も知らない素人に辛抱強くおつきあいいただき、 一番心強かったのが「最後までつきあいます」のお言葉でした。 何度お礼を申し上げても足りません…本当にありがとうございました。 単純なる入力の間違いで何度もご面倒をおかけしたこと、 申し訳なく恥ずかしく思っております。 今までExcelのマクロも使ったことがなく イベントプロシジャも初めて書きましたが、 何度も教えていただき一つずつ書き込んでいるうちに なんとなく構文の意味が分かってきて、 もっとAccessを勉強したいと思うようになりました。 ここ1週間Accessなんて大嫌いだー!と思っていたのに(←逆恨み) piroin654さまのおかげです。 Access,おもしろいです。もっと勉強します。 短い(でも濃い!)時間でしたが、ありがとうございました! 心から感謝しています。本当にありがとうございました。

その他の回答 (6)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.7

それと、Mo5の(3)の 列数  1 列幅  2cm No5の(4)の 列数  2 列幅  0cm;2cm は重要なので必ず設定してください。

20110704
質問者

お礼

piroin654さま、ご面倒をおかけし誠に申し訳ございません。 お暑い中お付き合いいただき、本当に感謝しております。 そして、おかげさまで一歩前進しました! cmb都道府県が、グループ化できました!!! ちゃんと3都県がリスト化されました(泣) 本当にありがとうございます! ここに貼り付けるようにと仰られたとおりにしようと思って、 コピー&ペーストしたら…あれ、どこか違う、と思って、 再度手で入力したら、ちゃんとできました(恥) 「FROM句の構文エラーです」も出ず、ちゃんと動きました。 単純な入力間違いだったのですね…お恥ずかしいです。 ですが、cmb市区町村のほうはまだ駄目です… 最初のcmb都道府県と同じで、白い1行のリストが出てきてしまいます。 cmb都道府県は、 SELECT T住所.都道府県 FROM T住所 GROUP BY T住所.都道府県; cmb市区町村は、 SELECT T住所.都道府県,T住所.市区町村 FROM T住所 WHERE(((T住所.都道府県)=[Forms]![F住所]!cmb都道府県])); 列数、列幅はそれぞれご指示どおりになっています。 まだお付き合いくださるとのこと、 なんてお礼を申し上げていいのかわかりませんが、 本当にありがとうございます。 お時間がある時で結構ですので、どうぞよろしくお願いいたします。

20110704
質問者

補足

あああ!で、できました!!! cmb市区町村の最後の「cmb都道府県」に「[」が抜けていました(恥) 気づいて入力したら!できました!!! 本当に本当にありがとうございます!!!

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.5

最初から説明します。簡単に確認のため以下のように してみてください。 (1) まず新しいフォームを作成してください。 名前をF住所とします。 (2) フォームにコンボボックスを二つ設定します。 コンボボックスの名前をそれぞれ、 cmb都道府県 cmb市区町村 とします。 (3) cmb都道府県の設定: 値集合ソース: SELECT T住所.都道府県 FROM T住所 GROUP BY T住所.都道府県; 列数  1 列幅  2cm その他は既定 (4) cmb市区町村の設定: 値集合ソース: SELECT T住所.都道府県, T住所.市区町村 FROM T住所 WHERE (((T住所.都道府県)=[Forms]![F住所]![cmb都道府県])); 列数  2 列幅  0cm;2cm その他既定 (5)  cmb都道府県の設定 cmb都道府県のプロパティの更新後処理の右端を クリックし、ビルダの選択を表示し、コードビルダ をクリックします。コード表が表示され、 Private Sub cmb都道府県_BeforeUpdate(Cancel As Integer) End Sub と、表示されます。そこで Private Sub cmb都道府県_BeforeUpdate(Cancel As Integer) Me!cmb市区町村.Requery End Sub のように、 Me!cmb市区町村.Requery を中に入れて保存して閉じます。 (6)ついでに応用 F住所にテキストボックスを一つ設定します。 そのコントロールソースに、 =[cmb市区町村].Column(1) とします。これによりテキストボックスに cmb市区町村で選択した名前が表示されます。 単に、=[cmb市区町村] とすると県の名前が 表示されます。cmb市区町村の値集合ソースでは 都道府県と市区町村が選ばれていますが、 コンボボックスの設定で都道府県は非表示 になっています。したがって単に、=[cmb市区町村]  とすると県の名前が表示される、ということです。 =[cmb市区町村].Column(0) とすると、県の名前が表示されます。

20110704
質問者

お礼

piroin654さま、たびたびお手をわずらわせ、本当に申し訳ありません。 また、お礼が遅くなってしまい、重ね重ね申し訳ありませんでした。 とてもわかりやすいご説明、ありがとうございます。 なのに…できないんです!申し訳ありません! お察しだと思いますが、テーブルとして挙げたのはあくまでも例ですので、 piroin654さまのNo.5の記述のとおり、 新たに「T住所」のテーブルと「F住所」のフォームを別に作って 昨日から何回も作ってみました。でもできないんです(泣) 全部入力してフォームに戻り試してみようとすると、 「FROM句の構文エラーです」というのが出るのが一番多いです。 もう一つ不思議なのは、 No.5(5)の手順でコードビルダをクリックすると、 書いていただいたコードとは違い、 Private Sub cmb都道府県_AfterUpdate() End Sub と書かれています。 これを、ご指示のとおりBeforeUpdate~に書き直しても、 やはりリストは空欄になってしまいます。 あんなにご親切に教えていただいたのに、 1日経っても何もお返事しないのは失礼だと思い、 途中ですがお礼のみ申し上げに出てまいりました。 もう少し、頑張ってみます! お時間を割いてくださいまして、本当にありがとうございました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

>「T住所」「都道府県」等には[ ]はいらないのですか? とくに必要はありませんが、No3のソースを値集合ソースに 貼り付けるとAccessが勝手に[]をつけるかもしれません。 値集合ソースの設定はプロパティの右端をクリックすると クエリビルダが表示されます。クエリを作る要領ででき ます。設定後はそのまま閉じます。 閉じるときに設定の変更の保存をたずねるので「はい」 とし、フォームのデザインビューで保存ボタンを 押します。 また、このクエリビルダをSQLビューにして、No3のSQL文 を実際に合わせて訂正して貼り付けて、そのまま閉じ、 閉じるときに設定の変更の保存をたずねるので「はい」 とし、フォームのデザインビューで保存ボタンを 押します。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

もう一つ。 [都道府県]のコンボボックスの値集合ソースは、 SELECT T住所.都道府県 FROM T住所 GROUP BY T住所.都道府県; です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

忘れ物がありました。 [都道府県]のコンボボックスの更新後処理で、 以下を設定してください。 コンボ0は[都道府県]のコンボボックスの名前です。 コンボ2は[市区町村]のコンボボックスの名前です。 実際に合わせて変更してください。 Private Sub コンボ0_BeforeUpdate(Cancel As Integer) Me!コンボ2.Requery End Sub

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

テーブルの名前を「T住所」とします。 [市区町村]のコンボボックスの値集合ソースを 以下のように設定します。 「フォーム名」はフォームの名前です。 「コンボ名」は[都道府県]のコンボボックスの名前です。 実際に合わせて変更してください。 SELECT T住所.都道府県, T住所.市区町村 FROM T住所 WHERE (((T住所.都道府県)=[Forms]![フォーム名]![コンボ名])); [市区町村]のコンボボックスのプロパティで、 列数   2 列幅   0cm;2cm 連結列  1 のように設定してください。

20110704
質問者

お礼

piroin654さま、早速のお返事ありがとうございました。 ご教示のとおり入力してみましたが…できませんでした(泣) 都道府県のコンボボックスの値集合ソースは「GROUP BY~」を付け足した状態でいいのでしょうか? 「T住所」「都道府県」等には[ ]はいらないのですか? お忙しいところ教えてくださったのに、力不足で申し訳ありません。 もう少し、教えていただいたやり方で試してみます。 お時間を割いていただき、本当にありがとうございました。

関連するQ&A

  • Accessフォーム

    Access初心者です。 Accessのフォーム上で、 [都道府県]のコンボボックスで東京都を選んだ場合、 [市区町村]のコンボボックスには「東京都」の市区町村名が選択できるようにしました。 フォームでの入力はきちんと出来るのですが、新しいレコードに入力すると、 前のレコードに入力した項目が消えてしまいます。 (テーブル上には、入力した情報が残っています) 色々試してみましたが、どうしても出来ません。 いったいどうしたらよいのでしょうか。ほとほと困っています。 どうかご教示ください。お願いいたします。

  • [OfficeXP_ACCESS] フォームでのコンボボックスの連動?について 

    お力添えいただきたくお願い申し上げます。 MS OfficeXP ACCESS についてです。 やりたいことは次のようなことです。 ・フォームで実現したい。 ・コンボボックスが3つ[都道府県][市区町村][その他]があります。 ・それぞれはリストより選ぶようにしたいです。 ・例として[都道府県]で47都道府県より"東京都"を選んだら、次の  [市区町村]は東京の市区町村名が選べるようになるというものです。 ご説明不足で申し訳ございませんが、ご協力をいただければ幸いです。 よろしくお願いいたします。

  • 別テーブルにあるデータを部分一致で選択するためにはどうしたらよいでしょ

    別テーブルにあるデータを部分一致で選択するためにはどうしたらよいでしょう。 申し訳ありません基本的なSQLを教えてください。 テーブルAに住所、テーブルBに市区町村名と市区町村コードがあり、テーブルAに当該市区町村コードを付けたしたいのですが、どうやってテーブルAとBをマッチさせればよいのでしょうか 具体的に言えば テーブルA内の住所カラムが以下のようなものを含んだデータだとします。 神奈川県横浜市中区XX-XX 東京都港区赤坂XXX ・ ・ ・ テーブルBには市区町村名カラムと市区町村コードカラムがあります。 中央区,0011 港区,0012 ・ ・ 横浜市中区,0033 横浜市南区,0034 ・ ・ (一応注釈ですがCSVのイメージだと思ってください) この2つのテーブルから合致したものに対し 神奈川県横浜市中区XX-XX,0033 東京都港区赤坂XXX,0012 という形で抽出したいのですがどのようにしたら良いのでしょうか (東京の”中央区”など重複する可能性のあるものはデータ側で対応しますので重複しないと考えて結構です) よろしくお願いいたします。

  • Accessで住所分割 並び順で問題?

    Accessで住所を4項目(都道府県・市区町村・町域・その他)に 分割しようとしていますが、市区町村の分割がうまくいきません。 並び順に問題がある気がしているのですが ご教授いただけると助かります。 ■マスタ登録状況■■■■■■■■■■■■■■■■■■■ ※日本郵政HPから郵便番号一覧をダウンロードし以下を用意 ○都道府県一覧 都道府県 --------- 東京都 神奈川県 ○市区町村一覧 ※市区町村が(以下にない場合)などのデータは削除済 都道府県 市区町村 ----------------------- 神奈川県 横浜市金沢区 神奈川県 横浜市 ○市区町村一覧 ※町域が(以下にない場合)などのデータは削除済 都道府県 市区町村   町域 ---------------------------------------- 神奈川県 横浜市金沢区 福浦 神奈川県 横浜市金沢区 平潟町 神奈川県 横浜市    中区新山下 ■処理フロー■■■■■■■■■■■■■■■■■■■ 【実行前】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 神奈川県横浜市金沢区福浦*-*-* (1)都道府県分割クエリ実行 ・都道府県をセット ・ワークから都道府県を削除 【クエリ(1)後】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 横浜市金沢区福浦*-*-*   神奈川県 (2)市区町村分割クエリ実行 ・市区町村をセット ・ワークから市区町村を削除 【クエリ(2)後】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 福浦*-*-*         神奈川県 横浜市金沢区 (3)町域分割クエリ実行 ・町域をセット ・ワークから町域を削除 【クエリ(3)後】住所一覧 ワーク          都道府県 市区町村 町域 ---------------------------------------------------- *-*-*         神奈川県 横浜市金沢区 福浦 !!!!!クエリ(2)市区町村分割で困っています!!!!! ■クエリ実行結果■■■■■■■■■■■■■■■■■■■ 欲しい結果↓ ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 福浦*-*-*         神奈川県 横浜市金沢区 現状↓ ワーク          都道府県 市区町村 町域 ---------------------------------------------------- 金沢区福浦*-*-*         神奈川県 横浜市 ■クエリSQL■■■■■■■■■■■■■■■■■■■ クエリ(2)市区町村分割(1) ※市区町村をセット UPDATE 住所一覧, 市区町村一覧 SET 住所一覧.市区町村 = 市区町村一覧.市区町村名 WHERE (((住所一覧.ワーク) Like 市区町村一覧.市区町村 & "*") AND ((住所一覧.都道府県)=市区町村一覧.都道府県名)); クエリ(2)市区町村分割(2) ※ワークから市区町村を削除 UPDATE 住所一覧 SET 住所一覧.ワーク = Replace(住所一覧.ワーク,住所一覧.市区町村,"") WHERE (((住所一覧.市区町村) Is Not Null)); 市区町村一覧の並び順を降順にしたり、 間に選択クエリをはさんでLen(市区町村)で降順にしたり、 「横浜市金沢区」が「横浜市」より先に来るようにしていますが うまくいきません。 長文ですがどうぞよろしくお願い致します。

  • <ACCESS> 住所から市区町村を抜き出したい

    Access初心者です。 住所一覧が書いてあるテーブルのデータから 市区町村を抜き出したく苦戦しております。 住所のデータは 都道府県から始まっているものから 市区町村から始まっているもの また、空白もあります。 市区町村名の一覧テーブル(T_市区町村)は作りました。 サブクエリには 市区町村:(select [市区町村名] from T_市区町村 where [住所] like "%" &[市区町村名] & "%") と入力しました。 そのまま実行すると 特に市区町村が抽出されることもなく そのまま住所が転記されてしまいます。 どのようにしたら良いのでしょうか。 お力を貸していただけたら幸いです。 よろしくお願い致します。

  • 【Access】住所を分割して抽出したい

    Accessで住所から都道府県と市区町村を抽出 はじめまして、Access初心者です。 右も左もわかっていないので 質問がおかしかったら申し訳ございません。 Accessのクエリを使って 住所録テーブルのデータにある住所から 都道府県、市区町村、それ以降 で分けて表示したいと思っています。 元のデータは、都道府県名が入っていないものや、都道府県名から始まっていない物、そもそも入力されていないものもあります。 都道府県一覧のテーブル(テーブル名: T_都道府県)と 市区町村一覧のテーブル(テーブル名: T_市区町村) は準備しました。 色々調べたのですが、Access不慣れな為 正しい式が書けておりません。 現在はサブクエリに 都道府県:(select[都道府県名] from T_都道府県 where [住所] like [都道府県名]&"*") 市区町村:(select[市区町村名] from T_市区町村 where [住所] like "*"& [市区町村名]&"*") それ以降:Replace (Nz([住所]," "),Nz([都道府県]," "),Nz([市区町村]," ")," ") と入力して実行したら このサブクエリでは1つのレコードしか返せません。 のエラーが出てしまいました。 (ですよね、、、) 都道府県と市区町村のテーブルを利用して どう直せば、うまく表示ができるのか わかる方教えていただけると幸いです。 どうか、よろしくお願いいたします。

  • エクセルでリストから選択する

    リストから選択のやり方はわかるのですが たとえばA1のセルで47都道府県のリストから東京都を選択すると B1のセルでは23区のリストが出てきて選択できるようにするには どうしたらよろしいでしょうか? 意味通じますか? A1で神奈川県を選択すると B1は23区ではなく横浜市や川崎市から選択できるようになるやり方です。 ご回答よろしくお願い致します。

  • PHPフォームの作り方を教えていただけないでしょうか?

    たとえば、都道府県の選択を契機に、市町村区のリスト項目を自動的に入替えが可能なフォームを作りたいのですが、どのようにしたらできますか?次のような様子で動かしたいと思っています。 <select>  都道府県:東京都 ←(1)東京都を選択したら、  市町村区:港区、文京区、葛飾区、大田区・・・・(2)それに応じた選択項目が現れる。 <select>  都道府県:神奈川  市町村区:藤沢市、厚木市、鎌倉市、横須賀市・・・・

    • ベストアンサー
    • PHP
  • Access コンボボックスの値をクリアしたい。

    毎度、お世話になります。m( )m Access2000で質問します。 フォーム上にコンボボックスが2つあります。 例えば1つ目が都道府県、2つ目が市町村のようなコンボで、1つ目の絞り込みの結果を2つ目のコンボにSQLを使って投げています。(例:1つ目-東京都 2つ目-杉並区)その後、1つ目のコンボを神奈川県に変更したときに 2つ目に入っている「杉並区」を削除して空白の状態に戻したいのですが、どのようにVBAを書けばいいのかわかりません。今のままだと神奈川県杉並区といったありえない登録が発生してしまいます。 1つ目のコンボ変更時の処理で2つ目のコンボの値をクリアする方法を教えてください。 よろしくお願いします。

  • Access 集計クエリにて。

    地域計: DCount("市区町村","テーブル名") 今上記の状態で止まっています。 下記のようなテーブルがあるとします。 都道府県 市区町村 東京都  新宿区 東京都  豊島区 東京都  葛飾区 東京都  新宿区 東京都  新宿区 東京都  葛飾区 東京都  豊島区 東京都  豊島区 東京都  豊島区 この中で新宿区は何件、豊島区は何件、葛飾区は何件、と出したいです。 しかし、都道府県市区町村は変動します。 毎回変わるのです。 なので特定の文字列を検索するというよりは その時にそのテーブルに貼った市区町村別に何件ずつ入ってるか、を求めたいです。 地域計をだしたいのです。 只今集計クエリで○○: Sum(IIf([フィールド名]="○○",1,0)) で○○の件数は何件かを出しているのですが この○○はどの地域でも変わらないため、指定できるのですが 地域は変わってしまう為指定できません。 ○○の隣に地域計を出したいのですが どうすればいいでしょうか。