Excel VBA 逆引き集 | 一括色付け

Excel VBA
スポンサーリンク

ねらい:一括色付けで効率的に見やすいシートを作る

Excelで「条件に合うセルをまとめて色付けしたい」「範囲全体を一気に塗りたい」という場面は多いです。初心者がよくやるのはセルを1つずつループして色を塗る方法ですが、これは 遅い・複雑 になりがちです。ここでは 一括色付けの基本と応用 を、分かりやすいコード例とともに解説します。


基本テンプレート:範囲をまとめて色付け

Sub ColorRangeBasic()
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1")
    
    ' A1~A10を黄色に塗る
    ws.Range("A1:A10").Interior.Color = vbYellow
End Sub
VB

重要ポイント(深掘り)

  • Interior.Color プロパティ: セルの背景色を指定する。
  • 色の指定方法:
    • vbYellowvbRed などの定数。
    • RGB(255, 200, 0) のようにRGB値で細かく指定可能。
  • 一括処理のメリット: ループ不要で高速。数千セルでも一瞬で塗れる。

応用テンプレート:複数範囲をまとめて色付け

Sub ColorMultipleRanges()
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1")
    
    ' A列とC列を水色に塗る
    Union(ws.Range("A1:A20"), ws.Range("C1:C20")).Interior.Color = RGB(200, 230, 255)
End Sub
VB

重要ポイント(深掘り)

  • Union 関数: 複数の範囲をまとめて1つのRangeとして扱える。
  • 一括指定: まとめた範囲に対して .Interior.Color を指定すれば一気に色付けできる。
  • 応用: 「入力欄」「チェック欄」など複数の列を同じ色で揃えるときに便利。

条件付き一括色付け:値に応じて色を変える

Sub ColorByCondition()
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1")
    
    Dim rng As Range
    Set rng = ws.Range("B2:B20")
    
    Dim arr As Variant
    arr = rng.Value ' 配列に読み込み
    
    Dim i As Long
    For i = 1 To UBound(arr, 1)
        If IsNumeric(arr(i, 1)) Then
            If arr(i, 1) >= 80 Then
                rng.Cells(i, 1).Interior.Color = vbGreen
            ElseIf arr(i, 1) >= 50 Then
                rng.Cells(i, 1).Interior.Color = vbYellow
            Else
                rng.Cells(i, 1).Interior.Color = vbRed
            End If
        End If
    Next i
End Sub
VB

重要ポイント(深掘り)

  • 配列に読み込む: Range.Value を配列にしてループすると高速。
  • 条件分岐: 値に応じて色を変える。点数や在庫数などに応用できる。
  • 初心者がやりがちな落とし穴: セルを直接ループすると遅い。配列で処理してから色付けするのが鉄則。

列全体・行全体を一括色付け

Sub ColorEntireColumnRow()
    Dim ws As Worksheet
    Set ws = Worksheets("Sheet1")
    
    ' 列全体を灰色に
    ws.Columns("D").Interior.Color = RGB(220, 220, 220)
    
    ' 行全体をオレンジに
    ws.Rows(5).Interior.Color = RGB(255, 200, 150)
End Sub
VB

重要ポイント(深掘り)

  • 列全体・行全体: Columns("D")Rows(5) を指定すれば一括で塗れる。
  • 注意: 列全体を塗るとシートが重くなることがある。必要な範囲に絞るのがベスト。

例題で練習

  1. 例1: ColorRangeBasic を実行 → A1:A10 が黄色になる。
  2. 例2: ColorMultipleRanges を実行 → A列とC列が水色になる。
  3. 例3: ColorByCondition を実行 → B列の点数に応じて緑・黄・赤に色分けされる。
  4. 例4: ColorEntireColumnRow を実行 → D列全体と5行目が色付けされる。

実務の落とし穴と対策

  • 落とし穴1:セルを1つずつ塗ると遅い
    • 対策: 配列に読み込んで条件判定、必要なセルだけ色付け。
  • 落とし穴2:列全体を塗って重くなる
    • 対策: 必要範囲に絞る。数万行でも End(xlUp) で最終行を取得して範囲指定。
  • 落とし穴3:色が分かりにくい
    • 対策: RGB で細かく色を調整。背景色と文字色のコントラストを意識。
  • 落とし穴4:条件が複雑になる
    • 対策: 条件付き書式でも対応可能だが、VBAなら複数条件を柔軟に組める。

スターター手順

  1. まずは範囲指定で色付け(基本テンプレ)。
  2. 複数範囲をまとめて塗る(Union)。
  3. 条件付き色分け(配列+If文)。
  4. 列全体・行全体の色付けで見やすい帳票を作る。

タイトルとURLをコピーしました