[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件で複数のセルの色を変える方法』(みや)
検索をかけたのですが、当てはまるものが無かったので質問させていただきます。
条件付き書式を4つ以上付ける方法というのはいくつもあったのですが、条件で複数のセルの色を一度に変える方法というのが探しきれませんでした。 実際どういうものが作りたいかというと、A列の5より下(A5〜A5000ぐらい)のセルに0〜12(もう少し増えるかも)の数字が入ります。
A列の数値 → カラーコード 0 → 38 , 1 → 40 , 2 → 36 , 3 → 35 , 4 → 34 , 5 → 37 , 6 → 39 , 7 → 7 , 8 → 44 , 9 → 6 , 10 → 4 , 11 → 54 , 12 → 33
そしてその数字に応じてセルの色を変えたいのですが、A列だけではなくA列〜O列のセルの色を変えたいのです。
例えば A5に1と入れると、A5〜O5の背景色がピンクに A10に2といれると、A10〜O10の背景色が黄色に といった様に、一つのセルの値で複数のセルの色を変えたいのです。
値を入力したセル自身・もしくはそれと隣のセルまで、というのは見たことがあるのですが、複数セルの色を変えるものを見つけられませんでした。 普通に条件付き書式だったらA列の値だけを見るようにすれば複数セルの色が変えられますが、 その条件を増やしたいのです。 説明がわかりにくかったらすいません。よろしくお願いします。
[エクセルのバージョン] Excel2000 [OSのバージョン] Windows2000
>値を入力したセル自身・もしくはそれと隣のセルまで、というのは見たことがあるのですが、 >複数セルの色を変えるものを見つけられませんでした。
見つけられた解決策が「VBA」だったとしたら、原理としては、同じことだと思います。
「セル自身から1つ右隣りまで」→「セル自身から14右隣りまで」に変更するだけだと思います。
(半平太)
衝突し、内容もほぼ同じですが・・・
>値を入力したセル自身・もしくはそれと隣のセルまで、というのは見たことがあるのですが これを応用して、色を変える範囲をResizeで広くしてやれば、よいです。 Resizeプロパティをお調べください。 (SHIOJII)
回答ありがとうございます。 当方VBはまったくの初心者で、探したコードを貼り合わせてなんとかしようと思ったのです が、動作がおかしくてどうすればわからない状態です。 現在使用中のコードを載せますので、よろしければ「ココを変えればいい」というヒントを教えていただけないでしょうか。よろしくお願いします。
Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Variant If Target.Column <> 1 Then Exit Sub 'A列以外は処理中止 If Target.Row < 5 Then Exit Sub '5行目より上は処理中止 If Target.Row > 10000 Then Exit Sub '10000行目より下は処理中止 If Target.Count = 1 Then Select Case Target.Value Case "" Target.Interior.ColorIndex = xlNone Case "0" Target.Interior.ColorIndex = 38 Case "1" Target.Interior.ColorIndex = 40 Case "2" Target.Interior.ColorIndex = 36 Case "3" Target.Interior.ColorIndex = 35 Case "4" Target.Interior.ColorIndex = 34 Case "5" Target.Interior.ColorIndex = 37 Case "6" Target.Interior.ColorIndex = 39 Case "7" Target.Interior.ColorIndex = 7 Case "8" Target.Interior.ColorIndex = 44 Case "9" Target.Interior.ColorIndex = 6 Case "10" Target.Interior.ColorIndex = 4 Case "11" Target.Interior.ColorIndex = 54 Case "12" Target.Interior.ColorIndex = 33
End Select Else For Each c In Selection Select Case c.Value Case "" c.Interior.ColorIndex = xlNone Case "0" c.Interior.ColorIndex = 38 Case "1" c.Interior.ColorIndex = 40 Case "2" c.Interior.ColorIndex = 36 Case "3" c.Interior.ColorIndex = 35 Case "4" c.Interior.ColorIndex = 34 Case "5" c.Interior.ColorIndex = 37 Case "6" c.Interior.ColorIndex = 39 Case "7" c.Interior.ColorIndex = 7 Case "8" c.Interior.ColorIndex = 44 Case "9" c.Interior.ColorIndex = 6 Case "10" c.Interior.ColorIndex = 4 Case "11" c.Interior.ColorIndex = 54 Case "12" c.Interior.ColorIndex = 33
End Select Next c End If Range("A5:A10000").Select Selection.Copy Range("B5:O10000").Select Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False Application.CutCopyMode = False End Sub
これだとA列に文字が入るタイミングでA列の書式をO列までコピーするという感じなのですが、書式をコピーするという方法ではなく、回答してくださったような感じの「色を変える対象をA〜Oにする」というにしたいです。 どうぞよろしくお願いします。(みや)
こんな感じになると思います。(ROUGE) '---- Private Sub Worksheet_Change(ByVal Target As Range) Dim c As Range, clr As Integer If Intersect(Target, Range("A5:A10000")) Is Nothing Then Exit Sub For Each c In Intersect(Target, Range("A5:A10000")) Select Case c.Value Case "": clr = xlNone Case 0: clr = 38 Case 1: clr = 40 Case 2: clr = 36 Case 3: clr = 35 Case 4: clr = 34 Case 5: clr = 37 Case 6: clr = 39 Case 7: clr = 7 Case 8: clr = 44 Case 9: clr = 6 Case 10: clr = 4 Case 11: clr = 54 Case 12: clr = 33 Case Else: clr = xlNone End Select c.Resize(, 15).Interior.ColorIndex = clr Next End Sub
ROUGE様 回答ありがとうございます。 まさに求めていたとおりのものです!本当に助かりました。 とてもシンプルになって…こんなに短くかけるものなのですね、スゴイです。 早速使わせていただきます。ありがとうございました。 (みや)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.