Я рекомендую следующее, используя Step 5
в цикле For
, что должно быть быстрее, чем вычисление по модулю для каждого i
.А затем скрыть следующие 4 строки сразу вместо одной за другой.
Dim ws As Worksheet
Set ws = ActiveSheet 'better define your sheet: ThisWorkbook.Worksheets("Sheet1")
Dim LastRow As Long
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim iRow As Long
For iRow = 10 To LastRow Step 5 'means 10, 15, 20, 25 …
ws.Rows(iRow + 1).Resize(RowSize:=4).EntireRow.Hidden = True
Next iRow
Если вы хотите лучше заботиться о последней использованной строке (не скрывайте пустые строки после LastRow
вместо этого используйте следующее:
For iRow = 10 To LastRow - 1 Step 5 'means 10, 15, 20, 25 …
If iRow + 5 > LastRow Then
ws.Rows(iRow + 1).Resize(RowSize:=LastRow - iRow).EntireRow.Hidden = True
Else
ws.Rows(iRow + 1).Resize(RowSize:=4).EntireRow.Hidden = True
End If
Next iRow
или даже короче (используя IIf
)
Dim ws As Worksheet
Set ws = ActiveSheet 'better define your sheet: ThisWorkbook.Worksheets("Sheet1")
Dim LastRow As Long
LastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Const NthRow As Long = 5 'show only every Nth row
Dim iRow As Long
For iRow = 10 To LastRow - 1 Step NthRow 'means 10, 15, 20, 25 …
ws.Rows(iRow + 1).Resize(RowSize:=IIf(iRow + NthRow > LastRow, LastRow - iRow, NthRow - 1)).EntireRow.Hidden = True
Next iRow