VBAで表のタイトル行(見出し行)を自動で太字・色付けするには、CurrentRegion.Rows(1) で表の先頭行を取得し、Font.Bold・Interior.Color を設定するだけです。複数のシートや表でも一括で適用できるため、手作業の書式設定が不要になります。
この記事では、次の内容を順番に解説します。
- 1行目を固定で装飾する基本コード
- CurrentRegionで表の範囲を自動検出して装飾する方法
- 複数の表を一括で装飾する方法
- 装飾をリセット(初期化)して再適用する方法
1行目を固定で装飾するには?
Rows(1) でシートの1行目を取得し、Font・Interiorのプロパティを設定します。
Sub FormatHeaderFixed()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.Rows(1)
.Font.Bold = True
.Font.Color = RGB(255, 255, 255) '白文字
.Interior.Color = RGB(0, 102, 204) '濃い青の背景
.HorizontalAlignment = xlCenter '中央揃え
End With
MsgBox "1行目の装飾が完了しました。"
End Sub
CurrentRegionで表の範囲を自動検出して装飾するには?
Range("A1").CurrentRegion はA1セルから続く連続したデータ範囲を自動で取得します。その中の .Rows(1) が表の先頭行になるため、表のサイズが変わっても常に正しい行が対象になります。
Sub FormatTableHeader()
Dim ws As Worksheet
Dim tbl As Range
Dim hdr As Range
Set ws = ActiveSheet
Set tbl = ws.Range("A1").CurrentRegion '表の範囲を自動取得
Set hdr = tbl.Rows(1) '先頭行だけを取得
With hdr
.Font.Bold = True
.Font.Color = RGB(255, 255, 255)
.Interior.Color = RGB(0, 102, 51) '深緑の背景
.HorizontalAlignment = xlCenter
.Borders(xlEdgeBottom).LineStyle = xlContinuous
.Borders(xlEdgeBottom).Weight = xlMedium
End With
MsgBox "タイトル行の装飾が完了しました。"
End Sub
複数の表を一括で装飾するには?
シート内に複数の表がある場合は、各表の開始セルを配列で定義してループ処理します。
Sub FormatMultipleTables()
Dim ws As Worksheet
Dim startCells As Variant
Dim startCell As Variant
Dim tbl As Range
Dim hdr As Range
Set ws = ActiveSheet
'各表の左上セルをここで指定する
startCells = Array("A1", "A10", "A20")
For Each startCell In startCells
Set tbl = ws.Range(startCell).CurrentRegion
Set hdr = tbl.Rows(1)
With hdr
.Font.Bold = True
.Font.Color = RGB(255, 255, 255)
.Interior.Color = RGB(68, 114, 196) '青系の背景
End With
Next startCell
MsgBox "全ての表のタイトル行を装飾しました。"
End Sub
装飾をリセットして再適用するには?
装飾を一度リセットしてから再適用したい場合は、クリアしてから設定し直します。
Sub ResetAndFormatHeader()
Dim ws As Worksheet
Dim hdr As Range
Set ws = ActiveSheet
Set hdr = ws.Range("A1").CurrentRegion.Rows(1)
'既存の書式をクリア
With hdr
.Font.Bold = False
.Font.Color = RGB(0, 0, 0)
.Interior.ColorIndex = xlNone
.Borders.LineStyle = xlLineStyleNone
End With
'再装飾
With hdr
.Font.Bold = True
.Font.Color = RGB(255, 255, 255)
.Interior.Color = RGB(112, 48, 160) '紫系の背景
End With
End Sub
まとめ
- 固定で1行目を装飾するなら
ws.Rows(1) - 表の範囲を自動検出するなら
Range("A1").CurrentRegion.Rows(1)を使うと表サイズが変わっても対応できる Font.Bold・Font.Color・Interior.Color・HorizontalAlignmentを組み合わせて装飾する- 複数表の一括装飾は開始セルを 配列で管理してループ すると拡張しやすい
- 再適用する場合は リセット → 再設定 の順で書くと前の書式が残らない
よくある質問
CurrentRegionで表を取得したら隣の表まで含まれてしまいます
CurrentRegionは空白行・列で囲まれた範囲を取得します。表と表の間に空白行または空白列が1行(1列)でも入っていれば別の表として扱われます。隣接している場合は手動で範囲を指定(例:Range("A1:E10"))してください。
1行目ではなく2行目をタイトル行にしたいです
.Rows(1) を .Rows(2) に変えるだけです。また tbl.Rows(2) で表の2行目が取得できます。
列の幅を自動調整も同時にしたいです
hdr.EntireColumn.AutoFit を装飾後に追加すると、タイトル行の列幅をデータに合わせて自動調整できます。
背景色をRGB以外で指定できますか?
カラーインデックス番号(Interior.ColorIndex = 5 など)でも指定できますが、RGB指定の方が直感的でおすすめです。Excelの「セルの書式設定」→「塗りつぶし」で好きな色を選び、そのRGB値をVBAに転用する方法が簡単です。
全シートのタイトル行をまとめて装飾できますか?
できます。For Each ws In ThisWorkbook.Worksheets でループして各シートのタイトル行に同じ処理を適用できます。シートによって表の位置が異なる場合は、各シートの開始セルを別途定義する必要があります。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



