Добрый день!
Подскажите пожалуйста, в документе реализована функция фильтрации данных через макрос.
На листе есть кнопка, по нажатию на неё открывается форма предлагающая ввести текст для фильтрации. Далее макрос ищет строки в которых есть введённый текст и скрывает строки в которых он не найден. Макрос работает так как надо, кроме скорости. При наличии 300 строк макрос обрабатывает их где-то секунд 15, а при большем и того больше.
Вопрос, можно ли как-то ускорить работу макроса:
Private Sub OK_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim iRange As Range
Dim lFifstRow As Long
Dim iFifstColumn As Integer
lFifstRow = Range("A2:F1000").Row
iFifstColumn = Range("A2:F1000").Column
lLastRow = Range("A2:F1000").Rows.Count + 3
iLastColumn = Range("A2:F1000").Columns.Count
Set iRange = Range(Cells(lFifstRow, iFifstColumn), Cells(lLastRow, iLastColumn))
Range("A2:F300").EntireRow.Hidden = False
With iRange
Set ifoundRng = .Cells.Find(What:="Текст для поиска", LookIn:=xlFormulas, LookAt:=xlPart)
Range(iRange.Address).EntireRow.Hidden = True
If Not ifoundRng Is Nothing Then
firstAddress = ifoundRng.Address
Do
Rows(ifoundRng.Row).Hidden = False
Set ifoundRng = .Cells.FindNext(ifoundRng)
Loop Until ifoundRng.Address = firstAddress
Else
MsgBox "Значение на листе не найдено!", vbExclamation, "Ошибка"
GoTo Exit_
End If
End With
Exit_:
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
Unload Me
End Sub
Подскажите пожалуйста, в документе реализована функция фильтрации данных через макрос.
На листе есть кнопка, по нажатию на неё открывается форма предлагающая ввести текст для фильтрации. Далее макрос ищет строки в которых есть введённый текст и скрывает строки в которых он не найден. Макрос работает так как надо, кроме скорости. При наличии 300 строк макрос обрабатывает их где-то секунд 15, а при большем и того больше.
Вопрос, можно ли как-то ускорить работу макроса:
Private Sub OK_Click()
Application.ScreenUpdating = False
Application.EnableEvents = False
Dim iRange As Range
Dim lFifstRow As Long
Dim iFifstColumn As Integer
lFifstRow = Range("A2:F1000").Row
iFifstColumn = Range("A2:F1000").Column
lLastRow = Range("A2:F1000").Rows.Count + 3
iLastColumn = Range("A2:F1000").Columns.Count
Set iRange = Range(Cells(lFifstRow, iFifstColumn), Cells(lLastRow, iLastColumn))
Range("A2:F300").EntireRow.Hidden = False
With iRange
Set ifoundRng = .Cells.Find(What:="Текст для поиска", LookIn:=xlFormulas, LookAt:=xlPart)
Range(iRange.Address).EntireRow.Hidden = True
If Not ifoundRng Is Nothing Then
firstAddress = ifoundRng.Address
Do
Rows(ifoundRng.Row).Hidden = False
Set ifoundRng = .Cells.FindNext(ifoundRng)
Loop Until ifoundRng.Address = firstAddress
Else
MsgBox "Значение на листе не найдено!", vbExclamation, "Ошибка"
GoTo Exit_
End If
End With
Exit_:
End If
Application.ScreenUpdating = True
Application.EnableEvents = True
Unload Me
End Sub