Excelでは、範囲を「テーブル(ListObject)」として設定することで、データ管理が格段にしやすくなります。
VBAを使うと、この テーブル全体に条件付き書式を自動適用 することが可能です。
テーブルは行の追加や削除が頻繁に行われるため、範囲を固定せずに テーブルのデータ範囲に動的に条件付き書式を適用 するのがポイントです。
1. 基本のコード例
例:「売上」テーブルの「金額」列で、100以上なら緑色にする」
Sub テーブル全体に条件付き書式()
Dim tbl As ListObject
Dim rng As Range
'「売上」という名前のテーブルを取得
Set tbl = ActiveSheet.ListObjects("売上")
'テーブルのデータ範囲(ヘッダー除く)を取得
Set rng = tbl.DataBodyRange
'既存の条件付き書式を削除
rng.FormatConditions.Delete
'条件付き書式を追加(100以上 → 背景を緑色)
rng.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="100"
rng.FormatConditions(1).Interior.Color = RGB(0, 255, 0)
End Sub
2. コードの解説
Set tbl = ActiveSheet.ListObjects("売上")
→ シート上にあるテーブル「売上」を取得しています。
テーブルには [テーブルデザイン] タブ → テーブル名 で名前を付けられます。tbl.DataBodyRange
→ テーブルの「ヘッダーを除いたデータ範囲」を表します。
これを指定することで、行数が増減しても自動的に範囲が調整されます。rng.FormatConditions.Delete
→ 条件付き書式を設定する前に一度削除しておくと、重複を防げます。- 条件付き書式の追加
Type:=xlCellValue
… セルの値を基準に判定Operator:=xlGreaterEqual
… 「以上」Formula1:="100"
… 判定基準の値
3. 列を限定して条件を設定する
テーブル全体ではなく、特定の列だけに条件を適用 したい場合は次のように書きます。
例:テーブル「売上」の「金額」列だけに条件付き書式を設定する
Sub テーブル列に条件付き書式()
Dim tbl As ListObject
Dim rng As Range
Set tbl = ActiveSheet.ListObjects("売上")
'「金額」列を範囲として取得
Set rng = tbl.ListColumns("金額").DataBodyRange
'既存の条件付き書式を削除
rng.FormatConditions.Delete
'条件付き書式を追加(200以上は赤文字)
rng.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="200"
rng.FormatConditions(1).Font.Color = RGB(255, 0, 0)
End Sub
👉 列名を指定できるので、列の位置が変わっても問題なく動作します。
4. テーブルならではのメリット
- 行を追加しても自動で条件付き書式が適用される
- 列名で指定できるため、可読性が高い
- 複数テーブルを対象に処理を繰り返すことも可能
まとめ
- VBAでは
ListObjects
を使ってテーブルを操作できる DataBodyRange
でヘッダーを除いたデータ範囲に書式を適用できる- 特定の列だけに設定する場合は
ListColumns("列名").DataBodyRange
を利用する
テーブルとVBAを組み合わせることで、データが追加・削除されても条件付き書式が自動で反映され、より効率的にデータ管理が可能になります。
コメント