VBAで特定の行だけ太字・罫線・背景色を設定するには、Font.Bold・Borders・Interior.Color を組み合わせるだけで実現できます。条件に応じてループで複数行に一括適用することで、毎回手作業で装飾する手間をなくせます。
この記事では、次の内容を順番に解説します。
- 行番号を指定して太字・罫線を設定する基本コード
- セルの値を条件にして複数行を自動装飾する方法
- 罫線の種類・太さ・色を変えるパターン一覧
- 装飾をリセット(初期化)するコード
指定した行に太字と罫線を設定するには?
Rows(行番号) で対象行を指定し、Font.Bold と Borders プロパティで装飾します。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 = xlLineStyleNoneとInterior.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が初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



