Скрыть строки, когда ячейка пуста 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 
Давайте будем гением компьютера.