- 締切済み
マクロで色の設定がしたいのですが・・・
こんにちは。 マクロで色の設定をしたいのですが、どうにもうまくいきません。 やりたいことは Sheet1に3×3の9つのセルを設定する Sheet2のA列に9行の枠を作る あらかじめ1は黒、2は灰色、3は・・・と1~15まで15色の色設定をしておく Sheet2の枠内に1~15の数字を入力したときに、Sheet1の9つのセル内の色が変わるようにしたいのです。 また、Sheet2のA1~A9がSheet1では3×3のセル設定なので 縦方向でも横方向でも進む順番は構わないのですが、 例えばSheet2:A1~A3=Sheet1:A1~A3、Sheet2:A4~A6=Sheet1:B1~B3、Sheet2:A7~A9=Sheet1:C1~C3と設定することは可能ですか? 現段階では、シート内でセルに直接数字を打ち込むと入力されたセルの色が変わるまでは出来たのですが、反映させることが出来ません。 宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
これは相当VBAを経験しないと難しいと思う。 (1)イベントプロシジュアーの利用を経験している必要あり その仕組みのありがたさが判っているか。 (2)3x3個の隣接セルが 1 2 3 4 5 6 7 8 9 の順番で、Cellsメソッドで一発指定できるという経験。 (エクセルVBAを経験して無いと、思い浮かばないでしょう。) この(2)のおかげで、上記対応で良いなら、1-2行のコードで質問のこと(Sheet2->Sheet1のセル間の対応関係づけ)が済んでしまう。これを知らず、シコシコとプログラムを組むと コード数が相当多くなる(*X)。 ーー Sheet2のChange イベントプロに Private Sub Worksheet_Change(ByVal Target As Range) MsgBox Target.Row i = Target.Row Worksheets("Sheet1).Range("A1:C3").Cells(i).Interior.ColorIndex = Target.Value End Sub (MsgBoxは実験後削除sする) 簡単のため、Sheet2への入力値をそのままColorIndex値に使ったが。 ーー 下記は幹で無いので省略している。 (1)Sheet2に入れる値の制限・チェック(色とのからみ) 入力値をそのままColorIndex値に使ったが、任意の色を設定するには 対応表が必要(*Y)。こういうプログラムテクニックの経験ありますか。 (2)Sheet2のChangeイベントを発効させる列の制限(A列だけでよいか)・チェック (3)Sheet2の入力の行の制限(9行とは例えばA1:A9の9行でよいか)・そのチェック は、経験者には簡単なので省略している。 ーー なんとなく質問表現などから、本課題は質問者には荷が重いのではと思う。 ーー 参考追記 上記で (*X)、(*Y)の部分のコードテクニックとしては S=Array(対応1A,対応1B、対応2A,対応2B・・ をお勧め。 対応1Aに対し対応1B 対応2Aに対し対応2B を定義できるので。 Sheet2->Sheet1の対応関係もこれを使うと自由に定義できる。
- fumufumu_2006
- ベストアンサー率66% (163/245)
>現段階では、シート内でセルに直接数字を打ち込むと入力されたセルの色が変わるまでは出来たのですが、反映させることが出来ません。 以下で反映されると思います。 Dim n As Integer For n = 1 To 9 Sheet1.Cells(((n - 1) Mod 3) + 1, (n - 1) \ 3 + 1).Interior.ColorIndex = Sheet2.Cells(n, 1).Interior.ColorIndex Next
お礼
早速のご連絡ありがとうございます。 VBAは全くの初心者で少し勉強したのですが、イマイチ分からず・・・。 今回のマクロも以前投稿されていた方のものを参考にしたのですが Private Sub Worksheet_Cange(ByVal Target As Range) Dim IColor As Integer Dm R As Range For Each R In Target If Not Intersect(R,Union(Range(B2:E5)))Is Nothing Then Select Case R Case"1" IColor=56 Case"2" IColor=16 ・ ・ ・←カラー15まで指定し、15以上は赤の設定にしました。 Case Is >=16 IColor=3 End Select R.Interior.ColorIndex=IColor End If Next End Sub です。 一番最初にこのコードを載せた方がより理解をしてくださったと思います。すみません。 回答頂いたコードで頑張ってみます。 本当にありがとうございました☆ また、解らなければ図々しいですが宜しくお願い致します。