Excel VBA быстрая обрезка диапазона с оценкой не работает - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь ускорить обрезку таблицы данных примерно с 5000 строками и 12 столбцами.

Я использовал Для каждого Цикл, который работает, но всегда устанавливает Excelв "не отвечает" некоторое время, прежде чем это будет сделано. Теперь я провел некоторое исследование и обнаружил, что с и Evaluate , очевидно, работает быстрее, но я не могу заставить его работать на меня. В итоге удаляется куча моих данных и прибегает к остальным.

Вот мой старый код, который работает, но работает медленно:

'trim everything in range
    Dim Rng As Range
    Set Rng = timeSheet.Range("A2:L" & lastCell)
    For Each cell In Rng
        If Not IsEmpty(cell.Value) Then
            cell.Value = Trim(cell)
        End If
    Next cell

Это мой новый быстрый кодно уничтожает мои данные:

'trim everything in range 2.0
    Dim Rng As Range
    Set Rng = timeSheet.Range("A2:L" & lastCell)
    With Rng
        .Value = Evaluate("IF(ROW(" & .Address & "),CLEAN(TRIM(" & .Address & ")))")
    End With

Любая идея, что не так с моим вторым кодом или другие идеи о том, как я могу ускорить первый код?

Спасибо!

1 Ответ

1 голос
/ 02 ноября 2019

Вы можете поместить значения в массив, так что Trim () там, а затем вернуть значения.

Sub Tester()
    Dim Rng As Range, r As Long, c As Long, arr, v
    Set Rng = timeSheet.Range("A2:L" & lastCell)
    arr = Rng.Value
    For r = 1 To UBound(arr, 1)
    For c = 1 To UBound(arr, 2)
        v = arr(r, c)
        If Len(v) > 0 Then arr(r, c) = Trim(v)
    Next c
    Next r
    Rng.Value = arr
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...