【Excel VBA】N行おきに罫線を引く方法(For…Stepループ)

縦に長いデータ表を印刷したり閲覧したりする際、数行おきに区切り線が入っていると、格段に見やすくなります。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回終わるごとに、カウンターirowInterval(5)ずつ増加させることを意味します。

これにより、変数i5, 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ループが非常に有効です。

  1. For i = N To 上限 Step N の構文でループを組む。
  2. ループの中で、対象範囲.Rows(i) を使ってN行ごとの行を取得する。
  3. 取得した行オブジェクトに対して、罫線の設定など、目的の処理を実行する。

このパターンを応用すれば、罫線だけでなく、N行おきに行の色を変えたり、特定の文字列を入力したりと、様々な定型的な書式設定やデータ加工を自動化することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次