Скрыть 4 в каждых 5 рядах - PullRequest
       0

Скрыть 4 в каждых 5 рядах

1 голос
/ 25 сентября 2019

Начиная с 10-й строки, которую мне нужно скрыть, мне нужно скрыть следующие 4 строки и повторять этот шаблон до последней строки, содержащей данные

, т.е.оставить строки 10, 15, 20, 25 и т. д., возможно, примерно до строки 300

. Это необходимо для того, чтобы вписать в макрос VBA большего размера в Excel, поэтому мне не нужен целый Sub () только в средней секции.

Я думаю, мне нужно найти строки с количеством последних строк от строки 10 до последней строки. Выберите строку 10, затем пропустите строку, скройте следующий цикл 4 ... Для цикла предположите, но я не знаю, с чего начать

Ответы [ 2 ]

4 голосов
/ 25 сентября 2019

Я рекомендую следующее, используя 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
1 голос
/ 25 сентября 2019

Попробуйте это:

Dim lngLR As Long
lngLR = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For i = 10 To lngLR
    If i Mod 5 <> 0 Then ActiveSheet.Rows(i).EntireRow.Hidden = True
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...