【VBA】条件付き書式:見出しを除外してデータ行だけに適用するテクニック

Excelの条件付き書式をVBAで操作するとき、見出し(タイトル行)まで書式が反映されてしまう ことがあります。
見出し行は通常フォーマット済みなので、データ行のみに条件付き書式を適用するのが実務的に正解です。

ここでは、VBAを使って 見出しを除外したデータ範囲だけに条件付き書式を設定する方法 を解説します。


スポンサーリンク

1. 見出しを除外する基本の考え方

  • 全体の範囲を取得
  • 見出し行(通常は1行目)を除外してデータ範囲を指定
  • その範囲に条件付き書式を適用

👉 ポイントは「対象範囲をデータ部分だけにする」ことです。


スポンサーリンク

2. 実装例:売上データ(2行目以降に適用)

例:売上データ(A1:D20)のうち、1行目は見出しなので除外し、2行目以降に条件付き書式を適用する

Sub 条件付き書式_見出し除外()
    Dim rng As Range
    Dim dataRange As Range
    
    '全体の範囲を指定(A1:D20)
    Set rng = Range("A1:D20")
    
    '見出し(1行目)を除外 → 2行目以降を取得
    Set dataRange = rng.Offset(1, 0).Resize(rng.Rows.Count - 1)
    
    '既存の条件付き書式を削除
    dataRange.FormatConditions.Delete
    
    '条件:セルの値が100未満なら赤文字
    dataRange.FormatConditions.Add _
        Type:=xlCellValue, _
        Operator:=xlLess, _
        Formula1:="100"
    
    dataRange.FormatConditions(1).Font.Color = RGB(255, 0, 0)
End Sub

👉 Offset(1,0) で1行下げ、Resize(rng.Rows.Count - 1) で「1行分少なく」しています。
つまり、見出し1行分を除外した範囲 を作成しているわけです。


スポンサーリンク

3. 動的にデータ行だけを対象にする方法

表の行数が変動する場合は、最終行を自動で取得すると便利です。

Sub 条件付き書式_見出し除外_動的()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim dataRange As Range
    
    Set ws = ThisWorkbook.Sheets("Sheet1")
    
    'A列の最終行を取得
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    '見出し(1行目)を除外 → 2行目から最終行まで
    Set dataRange = ws.Range("A2:D" & lastRow)
    
    '既存の条件付き書式を削除
    dataRange.FormatConditions.Delete
    
    '条件:200以上なら黄色背景
    dataRange.FormatConditions.Add _
        Type:=xlCellValue, _
        Operator:=xlGreaterEqual, _
        Formula1:="200"
    
    dataRange.FormatConditions(1).Interior.Color = RGB(255, 255, 0)
End Sub

👉 この方法なら、データ件数が増減しても自動で調整 されます。


4. 実務での応用例

  • 売上管理表で「金額の強調」だけをデータ行に適用
  • 在庫管理で「在庫数0 → 赤文字」をデータ行だけに設定
  • 成績表で「合格・不合格の色分け」をヘッダーを除外して実現

5. まとめ

  • 条件付き書式をVBAで設定する際は、見出しを除外する範囲指定 が大切
  • Offset と Resize を組み合わせて簡単に除外可能
  • 行数が可変なら 最終行を動的に取得 して範囲を設定すると実務的

コメント

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