Я могу заставить VBA нормально работать, но моя таблица - 20 МБ без данных. Я хочу сначала найти пустую ячейку, а затем спрятать каждую строку сразу от этого места до конца. Вот мой код, который работает:

Dim rl As Range
For Each rl In Sheets("Results").Range("$A$4:$A$800")
  If rl.Value = "" Then
      r1.EntireRow.Hidden = True
  Else: rl.EntireRow.Hidden = False
  End If
Next rl

Так что в этом примере, если r1.value = "", я хочу скрыться от этой строки до конца строки 800. Любой совет?

1 ответ1

0

Чтобы сделать это быстрее, попробуйте это:

Sub Test()
  Dim i As Long
  For i = 4 To 800
    If Sheets("Results").Cells(i, 1).Value = "" Then
      Rows(i & ":" & Rows.Count).EntireRow.Hidden = True
      Rows("1:" & i - 1).EntireRow.Hidden = False
      Exit Sub
    End If
  Next
End Sub

он проверяет первую ячейку в строке A без текста и скрывает все строки под ней (включая найденную ячейку) и делает все ячейки видимыми над ней (исключая найденную ячейку)
это также будет принимать ячейки как "без текста" с формулами, имеющими «» в качестве результата

только для скрытия, начиная с реальной замены пустых ячеек

 If Sheets("Results").Cells(i, 1).Value = "" Then

в

If isempty(Sheets("Results").Cells(i, 1).Value) Then

также когда прячешься только до изменения ряда 800

Rows(i & ":" & Rows.Count).EntireRow.Hidden = True

в

Rows(i & ":800").EntireRow.Hidden = True

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .