Excelで条件付き書式を設定する際、データ量が毎回変わると「どこまで書式を適用するか」を固定するのが難しくなります。
例えば売上データや在庫リストなど、行数が増えたり減ったりするシートでは、最終行を自動的に判定して範囲を設定する方法 が便利です。
ここでは、VBAを使って「データの最終行まで自動的に条件付き書式を適用する方法」を詳しく解説します。
1. 最終行を自動取得する基本の考え方
Excelでは、以下のような方法で最終行を取得できます。
End(xlUp)
を使う方法
👉 指定列の一番下から上方向に検索して、最後のデータ行を見つけるCurrentRegion
を使う方法
👉 データのかたまり(空白で囲まれた範囲)を自動的に判定
2. End(xlUp) を使ったサンプル
例:A列にデータが入っている表で、2行目以降の範囲に条件付き書式を適用
Sub 条件付き書式_最終行まで_EndxlUp()
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
'2行目から最終行までを対象
Set dataRange = ws.Range("A2:A" & lastRow)
'既存の条件付き書式を削除
dataRange.FormatConditions.Delete
'条件:100未満のセルを赤文字
dataRange.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlLess, _
Formula1:="100"
dataRange.FormatConditions(1).Font.Color = RGB(255, 0, 0)
End Sub
💡 ポイント
Cells(Rows.Count, "A").End(xlUp).Row
で最終行を取得- データが増えても自動で対応
3. CurrentRegion を使ったサンプル
CurrentRegion
を使うと、範囲全体を一気に取得できます。
Sub 条件付き書式_最終行まで_CurrentRegion()
Dim ws As Worksheet
Dim dataRange As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
'A1を基準にデータのかたまりを取得
Set dataRange = ws.Range("A1").CurrentRegion
'見出し行(1行目)を除外して2行目以降を対象
Set dataRange = dataRange.Offset(1, 0).Resize(dataRange.Rows.Count - 1)
'既存の条件付き書式を削除
dataRange.FormatConditions.Delete
'条件:200以上のセルを黄色背景
dataRange.FormatConditions.Add _
Type:=xlCellValue, _
Operator:=xlGreaterEqual, _
Formula1:="200"
dataRange.FormatConditions(1).Interior.Color = RGB(255, 255, 0)
End Sub
💡 ポイント
CurrentRegion
は空白で囲まれた範囲を自動認識- 列数や行数が変わっても柔軟に対応可能
4. どちらを使うべき?
- End(xlUp) → 単一列を基準に最終行を取得する場合に便利
- CurrentRegion → 表形式データ全体をまとめて処理したいときに便利
👉 実務では「売上表・在庫表」などの整った表は CurrentRegion
、
「特定の列を基準に範囲を決めたい場合」は End(xlUp)
がよく使われます。
5. まとめ
- 条件付き書式をVBAで設定する際は、最終行まで自動対応 させるのが実務的
End(xlUp)
で列基準の最終行を取得できるCurrentRegion
を使えば表全体を自動判定できる- データが増減しても安心して条件付き書式を維持できる
コメント