スポンサーリンク
下図では、「条件付き書式」機能により、H列に入れた数字によってA列~H列のセル背景色が変わるという設定をしてある。
私はこういう設定が好きでよくやるのだが、手作業じゃ面倒なのでマクロにしてみた。
ソースコード
ソースコードは下記の通り。
配列colorArrに入れた5種類の色が、作業列に入れた1~5の数値に応じて条件付き書式として設定されるようにしてあるが、この配列の要素数を増やせばもちろん設定できる条件付き書式の数も増える。
絶対もっと良いマクロを作る方はいらっしゃるだろうが、ひとまず簡単に作れるものとしてはこんな感じかなと。
下記のマクロ「setConditionFormatsFromNumbers」を、個人用マクロブックに組み込み、広く利用できると思う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
Option Explicit Sub setConditionFormatsFromNumbers() '作業用の列に数字を書かせ、それより左側の列に、 '数字に応じてセル背景色が変わる条件付き書式を追加する Dim ws As Worksheet: Set ws = ActiveSheet Dim endC As Long: endC = ws.Cells(1, Columns.Count).End(xlToLeft).Column Dim msg As String msg = "作業用の列の開始セルを選択して下さい。" msg = msg & vbCrLf & "作業用列より左側の列について条件付き書式を設定します。" Dim rng As Range Dim addr As String '初期表示する場所のアドレス。右端・上から2番目のセル addr = ws.Cells(2, endC).Address 'セル範囲を返す(Type:=8)のInputBoxでは、受け取り値をRange型に限定しておき、 'キャンセルが押されたときはエラー処理で良い。 On Error GoTo myErr Set rng = Application.InputBox(msg, Title:="開始セル選択", Default:=addr, Type:=8) Dim startR As Long: startR = rng.Row Dim workC As Long: workC = rng.Column Dim setConditionRng As Range '条件付き書式を、選択された列より左側に設定する Set setConditionRng = Range(ws.Cells(startR, 1), ws.Cells(Rows.Count, workC)) Call appSet Dim colorArr(1 To 5) As Variant '条件付き書式の背景色について、配列に入れる。 colorArr(1) = RGB(255, 204, 153) '朱 colorArr(2) = RGB(204, 255, 204) '緑 colorArr(3) = RGB(153, 204, 255) '水色 colorArr(4) = RGB(255, 204, 255) 'ピンク colorArr(5) = RGB(204, 204, 255) '紫 Dim i As Long Dim ref As Long Dim siki As String Dim fc As FormatCondition 'マクロ処理の都合上、いったんR1C1形式に変更する。 '元々の表示形式を変数に入れておく。 With Application ref = .ReferenceStyle .ReferenceStyle = xlR1C1 End With '配列に入れておいた情報を元に、条件付き書式をセットしていく。 For i = 1 To UBound(colorArr) '条件付き書式における数式 siki = "=RC" & workC & "=" & i Set fc = setConditionRng.FormatConditions.Add(Type:=xlExpression, Formula1:=siki) fc.Interior.Color = colorArr(i) Next i '表示形式を元に戻す Application.ReferenceStyle = ref Call appReset msg = "下記のセル範囲に対し設定終了しました。" msg = msg & vbCrLf & setConditionRng.Address MsgBox msg, vbInformation, "終了" myErr: Exit Sub End Sub Sub appSet() 'マクロ処理中に、描画など余計なものを省略して高速化 With Application .ScreenUpdating = False '描画を省略 .Calculation = xlCalculationManual '手動計算 .DisplayAlerts = False '警告を省略。 ' .EnableEvents = False 'DisplayAlertsよりこちらを設定した方が良いのかな? End With End Sub Sub appReset() '描画などの設定をリセット With Application .ScreenUpdating = True '描画する .Calculation = xlCalculationAutomatic '自動計算 .DisplayAlerts = True '警告を行う End With End Sub |
このマクロを起動すると、作業用の列について開始セルを選択させるダイアログが表示される。
ここでH2セルを選べば、それより左のA2:H1048576 のセル範囲に条件付き書式が設定される。
他に、たとえばH5セルを選んだなら、それより左のA10:H1048576 のセル範囲に条件付き書式が設定される。
手作業で設定する手順
一応、手作業でこの条件付き書式を設定する手順も。
まず、条件付き書式を設定したいA列~H列のセルを選択しておいた状態で
リボン「ホーム」タブ
→「条件付き書式」
→「ルールの管理」
とする。通常は「新しいルール」を選択するところだが、今回は複数の条件付き書式を立て続けにセットするので、敢えてこの「ルールの管理」から行く。
ルールの管理画面から「新規ルール」を押す。
ルールの設定画面で「数式を使用して、書式設定するセルを決定」を選び、相対参照に気をつけながら「=$H2=1」と数式欄に入力。そして「書式」を押す。
もちろんこのH2セルの参照は、直接Excelシート上のH2セルをクリックし入力補助を活用すれば良い。
次の設定画面で、好きな色を選んで「OK」
前の画面に戻るので「OK」を押す。
ルールの管理画面に戻るが、いま設定した書式の行を選択してから「重複ルール」を押す。
同じ条件付き書式ルールが作られるが、そこで「ルールの編集」を押す。
数式を利用した条件設定が表示されるので、
=$H2=1
の最後だけを2に書き換えて
=$H2=2
とすれば良い。
後は「書式」から、値が2のときの色を選択する。
値が3以降の場合についても、同様に設定していく。
スポンサーリンク