VBAで表のタイトル行を自動で太字・色付けする方法|CurrentRegion・Interior.Color・Font.Boldの使い方

VBAで表のタイトル行(見出し行)を自動で太字・色付けするには、CurrentRegion.Rows(1) で表の先頭行を取得し、Font.BoldInterior.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が初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール