• 締切済み

エクセル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位まで色分けしたいのですか。そちらもよけれが教えて下さい。よろしくお願いします。

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

対象シートのシートモジュールに設定するとして、こんな感じ? 入力規制については「入力規則」を利用しています。 入力規則の設定はしてはいますが、従前の値をクリアしていません。他のセルについても同様ですので、クリアする必要がある場合は修正してください。規則の設定も最小限なので、その他の設定は追加願います。 全体の設定は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

tokiwa7219
質問者

お礼

ありがとうございました。上手くいきました。素人同然なのでこのVBAを理解するのは難しいですが、このまま使わせていただきました。 それと、やっている間に『基本1…基本4』も選択できるような形にできないでしょうか?このマクロを見ても応用が利かずできれば教えて下さい。あと、別シートA1に『基本1…基本4』の選択ができ選択したら元のシートの一致する行を抜き出したいのですが(色も)、そのようなマクロも教えて下さい。よろしくお願いします。

tokiwa7219
質問者

補足

ありがとうございました。上手くいきました。素人同然なのでこのVBAを理解するのは難しいですが、このまま使わせていただきました。 それと、やっている間に『基本1…基本4』も選択できるような形にできないでしょうか?このマクロを見ても応用が利かずできれば教えて下さい。あと、別シートA1に『基本1…基本4』の選択ができ選択したら元のシートの一致する行を抜き出したいのですが(色も)、そのようなマクロも教えて下さい。よろしくお願いします。

関連するQ&A

専門家に質問してみよう