Скрыть строки, когда ячейка пуста excel (быстрее)
Я взглянул на некоторые статьи и предложения и придумал решение для моей проблемы.
Статья Более быстрый способ скрыть пустые строки, предлагаемые использовать для переключения Application.ScreenUpdating
перед циклом на false и после на true. Это немного ускорило скрипт, но для 10.000 строк это все еще занимает довольно много времени.
Требования:
Если первая ячейка в строке пуста, скройте всю строку, которая должна быть обратно совместима с другими версиями Excel, чем 2013
Текущее рабочее решение для Excel 2013
Application.ScreenUpdating = False Dim s As String For i = 1 To range("A1:A10000").Count s = i & ":" & i If IsEmpty(Cells(i, 1).Value) Then Rows(s).Select Selection.EntireRow.Hidden = True End If Next Application.ScreenUpdating = True
К сожалению, я не знаю, сколько данных на листе, оно может содержать менее 10.000, которые я использовал в моем примере или даже больше. Когда я запускаю скрипт, он отлично работает, но занимает довольно много времени для 10.000 строк и возрастов для всех ячеек на листе.
Макрос будет запускаться автоматически при загрузке книги (не уверен, как это сделать либо ха-ха)
Dim rngBlnk As Range On Error Resume Next 'in case no blanks are present... Set rngBlnk = Range("A1:A100000").SpecialCells(xlCellTypeBlanks) On Error GoTo 0 If Not rngBlnk Is Nothing Then Debug.Print rngBlnk.Address() rngBlnk.EntireRow.Hidden = True End If
Как и в моих комментариях и в этом посте: более быстрый способ скрыть пустые строки и спасибо @tigeravatar за указание на это. Я использовал следующий код, который работал в моем сценарии:
Range("A1:A10000").AutoFilter 1, "<>", , , False
Процесс выбора требует времени, и нет нужды выбирать строку перед скрытием строки. Попробуйте вариант ниже …
Application.ScreenUpdating = False Dim s As String For i = 1 To range("A1:A10000").Count s = i & ":" & i If IsEmpty(Cells(i, 1).Value) Then Rows(s).EntireRow.Hidden = True End If Next Application.ScreenUpdating = True