Заменить VBA, используя неравенство - PullRequest
4 голосов
/ 26 июня 2019

У меня частая обработка данных для клиента, который должен быть Excel VBA. Это сетка ячеек 3000x60 на 6 вкладок, поэтому цикл может занять некоторое время. Задача теста - найти значения >5 и выделить их.

Условное форматирование недоступно по разным причинам.

Цикл for очевиден, и я открыт для этого, но я ищу улучшение скорости.

Замена кажется быстрее. Я хочу попробовать Selection.Replace What: = "> 5", но это ищет строку, а не неравенство, которое я действительно хочу.

Ответы [ 2 ]

4 голосов
/ 26 июня 2019

Может быть, это интересный подход?

Sub Highlight()

Dim WS As Worksheet

For Each WS In ThisWorkbook.Worksheets
    For X = 1 To 60
        On Error Resume Next
        With Intersect(WS.UsedRange, WS.Columns(X))
            .AutoFilter 1, ">5"
            .Offset(1).Resize(.Rows.Count - 1).Interior.Color = vbYellow
            .AutoFilter
        End With
        On Error GoTo 0
    Next X
Next WS

End Sub

Очевидно, что есть много возможностей для улучшения (например, поворот экрана обновления и расчета), но вы должны понять.Я понятия не имею, если это быстрее :).По крайней мере, вы не будете зацикливать все ячейки.

enter image description here

enter image description here

1 голос
/ 26 июня 2019

Попробуйте:

Sub Highlight()
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Dim row As Long, col As Long, ws As Variant
    For Each ws In Worksheets
    For row = 1 To 3000
    For col = 1 To 60
        If ws.Cells(row, col).Value > 5 Then ws.Cells(row, col).Interior.ColorIndex = 4 'light green
    Next
    Next
    Next
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...