- 締切済み
エクセル2003のVBA
シート1のA列に『基本1,基本2,基本3,基本4』という文字をランダムに入力します。すると、例えば、A1に基本1、C1に『30,60,90,120』と選択できるコントロールボックスがあり、その中(『30,60,90,120』)から任意の数字を選択し決定するとC1に決定した数字が入力される。このようなVBAのプログラムを教えて下さい。基本2の場合は、『40,80,120,160』、基本3も、『40,80,120,160』、基本4は、『100,200,300,400,500』です。 ちなみに、『基本1,基本2,基本3,基本4』が入力されたときにセルA1~E1位まで色分けしたいのですか。そちらもよけれが教えて下さい。よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- fujillin
- ベストアンサー率61% (1594/2576)
対象シートのシートモジュールに設定するとして、こんな感じ? 入力規制については「入力規則」を利用しています。 入力規則の設定はしてはいますが、従前の値をクリアしていません。他のセルについても同様ですので、クリアする必要がある場合は修正してください。規則の設定も最小限なので、その他の設定は追加願います。 全体の設定はConstの値で変更できますが、各値の整合性をチェックしていませんので、設定値の数が合っていないとエラーになることがあります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim n As Integer, i As Integer Dim word() As String Const moji = "基本1,基本2,基本3,基本4" '//チェックする文字列(列挙) Const iro = "34,35,36,40" '//対応するセルの色(上に対応していること) '//listは選択項目のリスト(/が区切りです) Const list = "30,60,90,120/40,80,120,160/40,80,120,160/100,200,300,400,500" If Target.Column > 1 Or Target.Count > 1 Then Exit Sub word = Split(moji, ",") n = -1 For i = LBound(word) To UBound(word) If word(i) = Target.Value Then n = i: Exit For Next i Target.Offset(, 2).Validation.Delete If n < 0 Then Target.Resize(1, 5).Interior.ColorIndex = xlNone Exit Sub Else Target.Resize(1, 5).Interior.ColorIndex = Split(iro, ",")(n) Target.Offset(, 2).Validation.Add Type:=xlValidateList, AlertStyle:= _ xlValidAlertStop, Operator:=xlBetween, Formula1:=Split(list, "/")(n) End If End Sub
お礼
ありがとうございました。上手くいきました。素人同然なのでこのVBAを理解するのは難しいですが、このまま使わせていただきました。 それと、やっている間に『基本1…基本4』も選択できるような形にできないでしょうか?このマクロを見ても応用が利かずできれば教えて下さい。あと、別シートA1に『基本1…基本4』の選択ができ選択したら元のシートの一致する行を抜き出したいのですが(色も)、そのようなマクロも教えて下さい。よろしくお願いします。
補足
ありがとうございました。上手くいきました。素人同然なのでこのVBAを理解するのは難しいですが、このまま使わせていただきました。 それと、やっている間に『基本1…基本4』も選択できるような形にできないでしょうか?このマクロを見ても応用が利かずできれば教えて下さい。あと、別シートA1に『基本1…基本4』の選択ができ選択したら元のシートの一致する行を抜き出したいのですが(色も)、そのようなマクロも教えて下さい。よろしくお願いします。