Применяйте вычисления ко всему диапазону вместо циклического прохождения каждой ячейки VBA - PullRequest
0 голосов
/ 08 марта 2019

Таким образом, я должен пройти через диапазон около 10000 ячеек, содержащих строки, и сократить их до 255 символов.Мой настоящий код выглядит следующим образом:

For i = firstRow to lastRow
    Range("X" & i) = Left(Range("X" & i),255)
Next i

Однако, это очень медленно, поэтому мне было интересно, есть ли возможность сделать это один раз для всего диапазона вместо циклического прохождения каждой ячейки диапазона, илиесли бы был какой-то другой способ, более эффективный, чем делать это по-своему.

Ответы [ 3 ]

3 голосов
/ 08 марта 2019

Попробуйте:

Sub short()

    Dim arr, FirstRow As Long, LastRow As Long, i As Long

    arr = ThisWorkbook.Sheets("yoursheetname").Range("X" & FirstRow, "X" & LastRow).Value

    For i = 1 To UBound(arr)
        arr(i, 1) = Left(arr(i, 1), 255)
    Next i

    ThisWorkbook.Sheets("yoursheetname").Range("X" & FirstRow, "X" & LastRow).Value = arr



End Sub

Когда вы работаете с тысячами строк или ячеек, лучше всего использовать массивы.

1 голос
/ 08 марта 2019

Или это:

With ActiveSheet.Range("X" & firstRow & ":X" & lastRow)
    .Value = .Parent.Evaluate("LEFT(" & rng.Address & ",255)")
End With
1 голос
/ 08 марта 2019

Вы пытаетесь:

Option Explicit

Sub test()

    Dim Lastrow As Long, FirstRow, i As Long

    With ThisWorkbook.Worksheets("Sheet1")

        Lastrow = .Cells(.Rows.Count, "X").End(xlUp).Row
        FirstRow = 1

        For i = FirstRow To Lastrow
            .Range("X" & i).Value = Left(.Range("X" & i).Value, 255)
        Next i

    End With

End Sub

Или

Option Explicit

Sub test()

    Dim Lastrow As Long, FirstRow
    Dim rng As Range, cell As Range

    With ThisWorkbook.Worksheets("Sheet1")

        Lastrow = .Cells(.Rows.Count, "X").End(xlUp).Row
        FirstRow = 1
        Set rng = .Range(.Cells(FirstRow, 24), Cells(Lastrow, 24))

        For Each cell In rng
            cell.Value = Left(cell.Value, 255)
        Next cell

    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...