VBAで指定した行に太字・罫線・背景色を自動で設定する方法|Font.Bold・Borders・Interior.Colorの使い方

VBAで特定の行だけ太字・罫線・背景色を設定するには、Font.BoldBordersInterior.Color を組み合わせるだけで実現できます。条件に応じてループで複数行に一括適用することで、毎回手作業で装飾する手間をなくせます。

この記事では、次の内容を順番に解説します。

  • 行番号を指定して太字・罫線を設定する基本コード
  • セルの値を条件にして複数行を自動装飾する方法
  • 罫線の種類・太さ・色を変えるパターン一覧
  • 装飾をリセット(初期化)するコード

指定した行に太字と罫線を設定するには?

Rows(行番号) で対象行を指定し、Font.BoldBorders プロパティで装飾します。With 構文を使うと1つの行への複数の設定をまとめて書けます。

Sub FormatRow()

    Dim r As Long
    r = 5   '装飾したい行番号

    With Rows(r)
        .Font.Bold = True                                    '太字
        .Borders(xlEdgeTop).LineStyle    = xlContinuous      '上罫線
        .Borders(xlEdgeBottom).LineStyle = xlContinuous      '下罫線
    End With

End Sub

罫線の場所を指定する定数と、よく使う線のスタイルをまとめます。

定数場所
xlEdgeTop行の上端
xlEdgeBottom行の下端
xlEdgeLeft行の左端
xlEdgeRight行の右端
xlInsideHorizontal行内の横線(セルとセルの間)
LineStyle の値見た目
xlContinuous実線
xlDash破線
xlDot点線
xlDouble二重線
xlLineStyleNone罫線なし(削除)

条件に合う行をループで自動装飾するには?

「A列に”小計”と書いてある行だけ太字にする」のように、セルの値を条件にして複数行を一括装飾します。

Sub FormatByCondition()

    Dim ws      As Worksheet
    Dim i       As Long
    Dim lastRow As Long

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow

        If ws.Cells(i, 1).Value = "小計" Then
            With ws.Rows(i)
                .Font.Bold = True
                .Interior.Color = RGB(255, 255, 200)    '薄黄色の背景
                .Borders(xlEdgeTop).LineStyle    = xlContinuous
                .Borders(xlEdgeTop).Weight       = xlMedium    '中太線
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
                .Borders(xlEdgeBottom).Weight    = xlMedium
            End With
        End If

    Next i

    MsgBox "装飾が完了しました。"

End Sub

線の太さは Weight プロパティで変更できます。

Weight の値太さ
xlThin細線(デフォルト)
xlMedium中太線
xlThick太線

見出し行・データ行・合計行を自動で装飾するには?

行の種類によって装飾を変えたい場合は、条件をElseIfで分岐させます。1行目は見出し、最終行は合計、それ以外はデータ行として装飾を変える例です。

Sub FormatReportRows()

    Dim ws      As Worksheet
    Dim i       As Long
    Dim lastRow As Long

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 1 To lastRow

        With ws.Rows(i)
            '装飾をリセット
            .Font.Bold      = False
            .Interior.Color = xlNone
            .Borders.LineStyle = xlLineStyleNone

            If i = 1 Then
                '見出し行:太字+青背景+下罫線
                .Font.Bold      = True
                .Font.Color     = RGB(255, 255, 255)     '白文字
                .Interior.Color = RGB(68, 114, 196)      '青背景
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
                .Borders(xlEdgeBottom).Weight    = xlMedium

            ElseIf i = lastRow Then
                '合計行:太字+薄緑背景+上罫線
                .Font.Bold      = True
                .Interior.Color = RGB(226, 239, 218)     '薄緑
                .Borders(xlEdgeTop).LineStyle = xlContinuous
                .Borders(xlEdgeTop).Weight    = xlMedium

            Else
                '通常データ行:下に薄い区切り線
                .Borders(xlEdgeBottom).LineStyle = xlContinuous
                .Borders(xlEdgeBottom).Weight    = xlThin
                .Borders(xlEdgeBottom).Color     = RGB(200, 200, 200)   '薄灰色
            End If
        End With

    Next i

    MsgBox "レポートの装飾が完了しました。"

End Sub

装飾をすべてリセットするには?

設定した装飾をまとめてリセットしたい場合は、罫線・背景色・フォントをそれぞれ初期値に戻します。

Sub ClearFormatting()

    Dim ws      As Worksheet
    Dim lastRow As Long

    Set ws = ActiveSheet
    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    With ws.Range(ws.Rows(1), ws.Rows(lastRow))
        .Font.Bold         = False
        .Font.Color        = RGB(0, 0, 0)
        .Interior.ColorIndex = xlNone
        .Borders.LineStyle = xlLineStyleNone
    End With

    MsgBox "装飾をリセットしました。"

End Sub

まとめ

  • Font.Bold = True で太字、Borders(位置).LineStyle で罫線を設定する
  • Weight プロパティで罫線の太さ(細・中・太)を変えられる
  • Interior.Color = RGB(〇, 〇, 〇) で背景色を設定できる
  • ループと条件分岐を組み合わせると、セルの値に応じた自動装飾が実現できる
  • 装飾をリセットするには Borders.LineStyle = xlLineStyleNoneInterior.ColorIndex = xlNone を使う

よくある質問

罫線の色を変えるにはどう書きますか?

.Borders(xlEdgeBottom).Color = RGB(200, 0, 0) のように Color プロパティにRGB値を指定します。薄いグレーの区切り線にしたい場合は RGB(200, 200, 200) がよく使われます。

行全体ではなくA〜E列だけに罫線を引きたいです

Rows(i) の代わりに ws.Range(ws.Cells(i, 1), ws.Cells(i, 5)) で列を限定した範囲を指定できます。行全体に罫線を引くと印刷時に余白部分にも線が入ることがあるため、列を絞る方が実務では使いやすいこともあります。

処理が遅いです。速くする方法はありますか?

大量の行を処理する場合は Application.ScreenUpdating = False を処理の前に入れて画面更新を止めると大幅に速くなります。処理後は必ず Application.ScreenUpdating = True で元に戻してください。

条件付き書式(ホームタブ)との使い分けはどうすればいいですか?

条件付き書式はルールを設定すれば値が変わるたびに自動で反映されますが、複雑なロジックには対応しにくいことがあります。VBAは一度実行したタイミングでの装飾になりますが、ロジックの柔軟性が高く、複数の書式を組み合わせた処理が得意です。「常にリアルタイムで反映したい」なら条件付き書式、「実行ボタンで一括整形」ならVBAが向いています。

Interior.ColorIndex = xlNoneとInterior.Color = xlNoneは同じですか?

どちらも塗りつぶしなし(背景色の削除)として機能しますが、ColorIndex = xlNone の方が確実にリセットできます。Color = xlNone は環境によって動作が異なる場合があるため、リセット目的では ColorIndex = xlNone を使う方が安全です。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

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

コメントする

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

上部へスクロール