- 締切済み
Excelの入力規則について
Excelの入力規則(条件設定:入力値の種類=リスト)を使って以下のようなことをしています。 セルD2に都道府県名(近畿地方のみ) セルE2に市町村名 ここでD2で選択した都道府県名にあわせてE2に表示させるプルダウンメニューを切り替えることは出来るのでしょうか? 例えば、D2で「大阪府」を選んだ場合E2のプルダウンメニューに「大阪市」「池田市」「吹田市」…、D2で「兵庫県」を選ぶとE2に「神戸市」「西宮市」「芦屋市」…、といった具合です。 ちなみにマクロ、VBA等の知識はありませんが、即席可能であれば、そのあたりも含めて具体的な設定手順をご教示いただけませんか? よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 名前定義の別の方法です。 別のシート(Sheet2とします。)に以下のように表を作成します。 A B C D E F G 1 大阪府 兵庫県 京都府 ・・・・・ 2 大阪市 神戸市 京都市 ・・・・・ 3 堺市 ・・・・・ 4 ・・・・・ 5 ・・・・・ 要はNo.5の方の2行目を削除したのと同じです。 (ただし、三重県も近畿とするなら、G列までになりますが。) まず、1つ目の名前定義を、 [名前]:適当な名前(仮に「府県名」とする) [参照範囲]:「=Sheet2!$A$1:$G$1」 とします。 次に、元のシートのE2(市町村名を表示するセル)を選択して、2つ目の名前定義をします。 [名前]:適当な名前(仮に「市町村名」とする) [参照範囲]:「=OFFSET(Sheet2!$A$2,,MATCH(!D2,府県名,0)-1,COUNTA(INDEX(Sheet2!$A:$G,,MATCH(!D2,府県名,0))-1),)」 これで、D2(府県名)の入力規則を、 「リスト」「=府県名」 E2(市町村名)の入力規則を、 「リスト」「=市町村名」 とすれば出来ます。 昨今では、市町村の合併がさかんですが、この方法では、Sheet2の表で、2行目以降の市町村名を増減させても対応出来ます。 (2行目以降に空白を開けずに市町村名一覧を入力・削除して下さい。)
- telescope
- ベストアンサー率54% (1069/1958)
まず、リストを作ります。別のシートでも構いません。 D2セルとE2セルに表示させるのなら、Sheet2にリストを作っておきます。 A B C D E F 1 大阪府 兵庫県 京都府 滋賀県 奈良県 和歌山県 2 3 大阪市 神戸市 京都市 大津市 奈良県 和歌山市 4 池田市 西宮市 宇治市 彦根市 生駒市 田辺市 5 吹田市 芦屋市 舞鶴市 草津市 6 堺市 のようにリストを作成します。 2行目は空白にします。 入力した範囲を選択して、(上の例なら、A1からF6まで) 「挿入」-「名前」-「作成」で[上端]にチェックを入れて OK を押します。 府県名の範囲(上の例なら、A1からF1)を選択して 「挿入」-「名前」-「定義」で名前を付けます。 リストを設定したいセルを選択します。 D2を選択して 「データ」-「入力規則」の[入力値の種類」で[リスト]を選択 [元の値]に = に続けて「定義」でつけた名前を入力します。 名前に「府県名」とつけたとしたら、 =府県名 E2を選択 「データ」-「入力規則」で[入力値の種類」で[リスト]を選択 [元の値]に =INDIRECT(D2) と入力します。 エラー表示がでますが、かまわず「はい」を押します。
お礼
ありがとうございます。 これは#1さんの方法と同じですね。
- imogasi
- ベストアンサー率27% (4737/17069)
#3です。過去質問の説明が判り難ければ、下記 マクロの記録的なVBAを実行してください。 ツール-マクロ-VBE-挿入-標準モジュールの画面に 下記をコピーし貼りつけします。 府県市区町村テーブルは、入力セルと同じシートに作ること。別シートに作ると旨く行かないようです。 (例)県・市名省略手抜き。実際は入れてください。 E1:J4 大阪 池田 豊中 茨木 攝津 兵庫 神戸 西宮 尼崎 姫路 三木 京都 京都 亀岡 綾部 城陽 奈良 天理 奈良 橿原 (VBA) Sub Macro1() Range("A1:A9").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$E$1:$E$5" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With Range("b1:b9").Select With Selection.Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=offset($e$1,match(a1,$e$1:$e$5,0)-1,1,1,5)" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .IMEMode = xlIMEModeNoControl .ShowInput = True .ShowError = True End With End Sub (修正点。本番に合わせて上記VBAの下記部分を修正すること) Range("A1:A9").Select->府県を入力する列とセル範囲 で置き変える。 Formula1:="=$E$1:$E$5"->府県テーブルのある範囲(列) Range("b1:b9").Select->市町村をセットする入力範囲(列)。 Formula1:="=offset($e$1,match(a1,$e$1:$e$5,0)-1,1,1,5)" ->$e$1は府県テーブルの1番上行セル。 a1は府県名入力列の1番上行セル。絶対番地にしない。 $e$1:$e$5は府県テーブルの列のセル範囲。 最後の5は市区町村数の最大数(F列から始まり1番右J列までの列数) そしてVBAを実行する。F5キーで実行される。
- imogasi
- ベストアンサー率27% (4737/17069)
http://okweb.jp/kotaeru.php3?q=876477 にも同じような質問があり、私の回答他をご参照下さい。
お礼
ありがとうございます。 目的は同じでも様々なやり方があることがわかりました。やはりExcelは奥が深いですね。
- inte-nori
- ベストアンサー率48% (33/68)
例えばF1~F3に、リスト用の「大阪府」「京都府」「兵庫県」が入っているとします。 また、G1~G4に大阪府の市名、H1~H4に京都府の市名、I1~I4に兵庫県の市名が入っているとします。 通常どおり、D2の入力規則を「リスト」>「=$F$1:$F$3」としておきます。 次に、E2の入力規則に、「リスト」>「=IF($D$2="大阪府",$G$1:$G$4,IF($D$2="京都府",$H$1:$H$4,$I$1:$I$4))」というようにIF文を入力します。 これで出来るかと思いますがどうでしょう?
お礼
ありがとうございます。 IFを使う方法もあるのですね。参考になります。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
http://park11.wakwak.com/~miko/Excel_Note/frame1.htm ここの左側の 12.入力規制のページの中の、 6.入力規則のリストに、他のセルに入力した値に対応する項目を設定するには が参考になると思います。 リスト側シート、と入力側シート、の設定をするだけで出来ます。 マクロを使う方法も載っていますが、難しい(汗)
お礼
ありがとうございます。 マクロは基礎がないのでなるべく関数だけで作りたい、と思っていましたので、助かりました。
お礼
ありがとうございます。 本当にExcelの本を開くよりも分かりやすい説明で、助かります。