縦に長いデータ表を印刷したり閲覧したりする際、数行おきに区切り線が入っていると、格段に見やすくなります。Excelの条件付き書式でも実現できますが、VBAを使えば、マクロの処理フローの一部として、より動的で柔軟な罫線設定が可能です。
この記事では、For...Step
ループというVBAの構文を使い、指定したデータ範囲にN行おきに罫線を引くための、シンプルで実用的なコードを解説します。
目次
完成したVBAコード
以下が、A1セルを含むデータ範囲全体に対して、5行ごとに下罫線を引くVBAコードです。
Sub AddBordersEveryNthRow()
' 変数を宣言します
Dim dataRange As Range
Dim rowInterval As Long
Dim i As Long
'--- 設定 ---
' 罫線を引く間隔(行数)
rowInterval = 5
' 処理対象のデータ範囲(A1セルを含む表全体を自動認識)
Set dataRange = ThisWorkbook.ActiveSheet.Range("A1").CurrentRegion
'--- 設定ここまで ---
' 画面更新をオフにして高速化
Application.ScreenUpdating = False
' --- 1. 最初に範囲全体の既存の罫線をすべてクリア ---
dataRange.Borders.LineStyle = xlNone
' --- 2. For...Stepループを使い、指定した間隔で罫線を引く ---
For i = rowInterval To dataRange.Rows.Count Step rowInterval
With dataRange.Rows(i).Borders(xlEdgeBottom)
.LineStyle = xlContinuous ' 実線
.Weight = xlThin ' 細線
.Color = vbBlack ' 色(黒)
End With
Next i
' 画面更新をオンに戻す
Application.ScreenUpdating = True
MsgBox rowInterval & "行おきに罫線を引きました。"
End Sub
コードのポイント解説
① 既存の罫線をクリア
dataRange.Borders.LineStyle = xlNone
マクロを実行する前に、範囲内に既に罫線が引かれている可能性があります。最初にLineStyle = xlNone
ですべての罫線をクリアしておくことで、何度マクロを実行しても、常に同じきれいな結果が得られます。
② For...Step
ループ
For i = rowInterval To dataRange.Rows.Count Step rowInterval
これが、N行おきに処理を行うための核心部分です。
For i = rowInterval To ...
: ループのカウンター変数i
を、初期値rowInterval
(この例では5)からスタートさせます。Step rowInterval
: ループが1回終わるごとに、カウンターi
をrowInterval
(5)ずつ増加させることを意味します。
これにより、変数i
は5
, 10
, 15
, 20
…と、5の倍数で変化していき、5行ごとの処理が実現できます。
③ 罫線の設定
With dataRange.Rows(i).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
End With
ループの中で、dataRange.Rows(i)
とすることで、データ範囲の中でのi
番目の行(つまり5行目、10行目…)を指定しています。
.Borders(xlEdgeBottom)
: その行の下辺の罫線を操作対象として指定します。.LineStyle
: 罫線の種類(xlContinuous
は実線)を指定します。.Weight
: 罫線の太さ(xlThin
は細線)を指定します。
まとめ
VBAでN行おきに特定の処理を行う場合、For...Step
ループが非常に有効です。
For i = N To 上限 Step N
の構文でループを組む。- ループの中で、
対象範囲.Rows(i)
を使ってN行ごとの行を取得する。 - 取得した行オブジェクトに対して、罫線の設定など、目的の処理を実行する。
このパターンを応用すれば、罫線だけでなく、N行おきに行の色を変えたり、特定の文字列を入力したりと、様々な定型的な書式設定やデータ加工を自動化することができます。