- ベストアンサー
エクセルでこんなこと出来ますか?
A1からB4までの8個のセルを使用しているとして、、、(A列はタイトル、B列は希望の項目を選択とします) B1で入力規則を使いA,B,Cと選べるようにすると、その下のB2,B3,B4での選択項目が変化するように。 例:A1項目、A2種類、A3大きさ、A4色とあったとした場合、B1でネコを選べば、B2ペルシャネコやチンチラ等が選べ、同時にB3では大、中、小、B4では白や黒が選べるのだが、B1で犬を選べば、B2ではハスキー、チワワワが選べ、同時にB3では特大、大、中、小、極小、B4では赤、黄色、緑が選べるといった具合に。 昔このようになったマクロ?を含んだ表を貰った事があるのですが、私にも出来ますか?詳しくないので分かりやすい説明だと助かります^^; よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAを使わずとも入力規則で出来ますよ。 名前を定義する事が必要です。 結論は エクセル技道場の 縦横可変範囲の名前定義でリスト http://www2.odn.ne.jp/excel/waza/validation.html#SEC5 ですが、 入力規則 http://www2.odn.ne.jp/excel/waza/validation.html ここから読み進んで行くと仕組みがわかります。
その他の回答 (3)
- web2525
- ベストアンサー率42% (1219/2850)
IF文でいけるのでは? 入力規制の〔元の値〕に=IF($B$1="ネコ"、ネコの場合の選択肢、犬の場合の選択肢) これで問題ないと思います(マクロは使いません)
- jindon
- ベストアンサー率43% (50/116)
VBAよりもむしろ各参照範囲に範囲名を付けて、INDIRECT関数で制御するほうが後の拡張に便利かも... 例えば、 ネコの種類のリストに範囲名 種類ネコ を付ける。 B2の入力規則の元の値に =INDIRECT($A$2&$B$1) B1がネコの時、INDIRECTの中は 種類ネコ になりますね? 同様に 犬 の種類にも範囲名 種類犬 を付ける (同一範囲に別の名前を登録することもできますので、一つの範囲を別名で共有できます) B1が犬の時、INDIRECTの中は 種類犬 になりますね? といった具合に、INDIRECT関数の中身が 範囲名 になるようにしておけば良いのです。 次は 大きさネコ、大きさ犬・・・色ネコ、色犬・・・ 順次INDIRECT関数の中身を($A$3&$B$1),($A$4&$B$1) こうしておいた方が、後に項目、種類等が増えた場合に修正し易いと思います。 最初は少々面倒ですが、いずれにしても入力規則に範囲指定はしなくてはならないので手間は同じようなものですね。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Bの列には、あらかじめ入力規則が設定してあり、 同じシートにリストすべき項目が入力されているとして Workbook の SheetChange イベントに以下の様に書きます。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Target.Address = "$B$1" Then If Target.Value = "ネコ" Then Range(Target.Offset(1, 0), Target.Offset(3, 0)).ClearContents With Target.Offset(1, 0).Validation '1コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$I$2:$I$4" '種類リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(2, 0).Validation '2コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$J$2:$J$4" '大きさリストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(3, 0).Validation '3コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$k$2:$k$2" '色リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With End If If Target.Value = "犬" Then Range(Target.Offset(1, 0), Target.Offset(3, 0)).ClearContents With Target.Offset(1, 0).Validation '1コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$I$6:$I$9" '種類リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(2, 0).Validation '2コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$J$6:$J$10" '大きさリストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With With Target.Offset(3, 0).Validation '3コ下のドロップリスト .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=$K$6:$K$8" '色リストの範囲 .IgnoreBlank = True .InCellDropdown = True .ShowInput = True .ShowError = True End With End If End If End Sub
お礼
ありがとうございます。 しかし、ちょっと難しすぎるというか、、、 「Workbook の SheetChange イベント」とはどこを指すのでしょうか?まずここで躓いてしまいました^^; どこの部分に書き込めばよいのでしょうか?