みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

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

解決済みの質問

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

Access初心者です。
ほかの類似の質問を検索して試してみたのですが、
どうしても同じようにできません。
もう1週間も同じところでつまづいています。
どなたか、初心者にもわかるように教えていただければ幸いです。

以下のようなテーブルがあるとします。
[都道府県] [市区町村]
東京都  新宿区
東京都  港区
東京都  渋谷区
神奈川県  横浜市
神奈川県  川崎市
神奈川県  藤沢市
埼玉県  さいたま市
埼玉県  熊谷市
埼玉県  三郷市

フォーム上で、 [都道府県]のコンボボックスで東京都を選んだ場合、
[市区町村]のコンボボックスには「東京都」の市区町村名が
選択できるようにしたいのですが、
一番最初のところで行き詰っています。

コンボボックスウィザードにしたがって
[都道府県]のコンボボックスを作成すると、
[東京都]
[東京都]
[東京都]
[神奈川県]
[神奈川県]
[神奈川県]

というリストが出てきてしまいます。

過去の質問を検索し、プロパティの値集合ソースで、
SELECT[都道府県]…FROM[テーブル名]の後に、
GROUP BY[都道府県]と書き加えたのですが、
こうするとリストが出てこなくなります。

いったいどうしたらよいのでしょうか。
ほとほと困っています。
どうかご教示ください。お願いいたします。

投稿日時 - 2011-07-27 15:27:29

QNo.6903025

困ってます

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

ごめんなさい。暑さで脳の中が煮えくり返り、
大間違いをしでかしていました。

更新後処理ですから、

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
このぐらいの長さなら大丈夫です。

投稿日時 - 2011-07-28 16:58:57

お礼

最新のご回答にもうお礼をつけられなくなってしまったので、
こちらに改めてお礼を書かせていただきます。

piroin654さま、本当に本当にありがとうございました。
顔も知らない素人に辛抱強くおつきあいいただき、
一番心強かったのが「最後までつきあいます」のお言葉でした。
何度お礼を申し上げても足りません…本当にありがとうございました。

単純なる入力の間違いで何度もご面倒をおかけしたこと、
申し訳なく恥ずかしく思っております。
今までExcelのマクロも使ったことがなく
イベントプロシジャも初めて書きましたが、
何度も教えていただき一つずつ書き込んでいるうちに
なんとなく構文の意味が分かってきて、
もっとAccessを勉強したいと思うようになりました。
ここ1週間Accessなんて大嫌いだー!と思っていたのに(←逆恨み)
piroin654さまのおかげです。
Access,おもしろいです。もっと勉強します。

短い(でも濃い!)時間でしたが、ありがとうございました!
心から感謝しています。本当にありがとうございました。

投稿日時 - 2011-07-29 16:10:11

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

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

回答(7)

ANo.7

それと、Mo5の(3)の

列数  1
列幅  2cm


No5の(4)の

列数  2
列幅  0cm;2cm

は重要なので必ず設定してください。

投稿日時 - 2011-07-28 17:03:09

補足

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

本当に本当にありがとうございます!!!

投稿日時 - 2011-07-29 15:49:51

お礼

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都道府県]));

列数、列幅はそれぞれご指示どおりになっています。

まだお付き合いくださるとのこと、
なんてお礼を申し上げていいのかわかりませんが、
本当にありがとうございます。
お時間がある時で結構ですので、どうぞよろしくお願いいたします。

投稿日時 - 2011-07-29 15:45:00

ANo.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)
とすると、県の名前が表示されます。

投稿日時 - 2011-07-27 17:23:13

お礼

piroin654さま、たびたびお手をわずらわせ、本当に申し訳ありません。
また、お礼が遅くなってしまい、重ね重ね申し訳ありませんでした。
とてもわかりやすいご説明、ありがとうございます。

なのに…できないんです!申し訳ありません!
お察しだと思いますが、テーブルとして挙げたのはあくまでも例ですので、
piroin654さまのNo.5の記述のとおり、
新たに「T住所」のテーブルと「F住所」のフォームを別に作って
昨日から何回も作ってみました。でもできないんです(泣)

全部入力してフォームに戻り試してみようとすると、
「FROM句の構文エラーです」というのが出るのが一番多いです。

もう一つ不思議なのは、
No.5(5)の手順でコードビルダをクリックすると、
書いていただいたコードとは違い、
Private Sub cmb都道府県_AfterUpdate()

End Sub
と書かれています。
これを、ご指示のとおりBeforeUpdate~に書き直しても、
やはりリストは空欄になってしまいます。

あんなにご親切に教えていただいたのに、
1日経っても何もお返事しないのは失礼だと思い、
途中ですがお礼のみ申し上げに出てまいりました。
もう少し、頑張ってみます!
お時間を割いてくださいまして、本当にありがとうございました。

投稿日時 - 2011-07-28 15:56:15

ANo.4

>「T住所」「都道府県」等には[ ]はいらないのですか?

とくに必要はありませんが、No3のソースを値集合ソースに
貼り付けるとAccessが勝手に[]をつけるかもしれません。

値集合ソースの設定はプロパティの右端をクリックすると
クエリビルダが表示されます。クエリを作る要領ででき
ます。設定後はそのまま閉じます。
閉じるときに設定の変更の保存をたずねるので「はい」
とし、フォームのデザインビューで保存ボタンを
押します。

また、このクエリビルダをSQLビューにして、No3のSQL文
を実際に合わせて訂正して貼り付けて、そのまま閉じ、
閉じるときに設定の変更の保存をたずねるので「はい」
とし、フォームのデザインビューで保存ボタンを
押します。

投稿日時 - 2011-07-27 16:52:36

ANo.3

もう一つ。

[都道府県]のコンボボックスの値集合ソースは、

SELECT T住所.都道府県
FROM T住所
GROUP BY T住所.都道府県;

です。

投稿日時 - 2011-07-27 16:19:42

ANo.2

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


Private Sub コンボ0_BeforeUpdate(Cancel As Integer)
Me!コンボ2.Requery
End Sub

投稿日時 - 2011-07-27 16:09:21

ANo.1

テーブルの名前を「T住所」とします。

[市区町村]のコンボボックスの値集合ソースを
以下のように設定します。
「フォーム名」はフォームの名前です。
「コンボ名」は[都道府県]のコンボボックスの名前です。
実際に合わせて変更してください。


SELECT T住所.都道府県, T住所.市区町村
FROM T住所
WHERE (((T住所.都道府県)=[Forms]![フォーム名]![コンボ名]));



[市区町村]のコンボボックスのプロパティで、

列数   2
列幅   0cm;2cm
連結列  1

のように設定してください。

投稿日時 - 2011-07-27 16:00:18

お礼

piroin654さま、早速のお返事ありがとうございました。
ご教示のとおり入力してみましたが…できませんでした(泣)

都道府県のコンボボックスの値集合ソースは「GROUP BY~」を付け足した状態でいいのでしょうか?
「T住所」「都道府県」等には[ ]はいらないのですか?

お忙しいところ教えてくださったのに、力不足で申し訳ありません。
もう少し、教えていただいたやり方で試してみます。
お時間を割いていただき、本当にありがとうございました。

投稿日時 - 2011-07-27 16:21:24

あなたにオススメの質問