首页 > 解决方案 > Excel VBA - 加速编辑列中所有单元格的循环

问题描述

我正在使用以下方法将列中的所有条目(第 1 行中的标题除外)修剪为最后四个字符:

Range("A2").Select

Do While ActiveCell <> ""
    ActiveCell = Right(ActiveCell.Value, 4)
    ActiveCell.Offset(1, 0).Select
Loop

它可以工作,但在大文件上速度很慢。有谁知道我怎样才能加快速度?

标签: excelvba

解决方案


除了评论中的链接答案外,我更喜欢在循环时使用变体数组。它们存储在内存中。每当访问工作表时,vba 都需要放慢速度。通过限制我们的互动,我们可以加快速度。

Sub right4()
    With ActiveSheet 'better to use actual worksheet ie Worksheets("Sheet1")
        Dim rng As Range
        Set rng = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
    End With
        
    Dim rngarr As Variant
    rngarr = rng.Value
    
    Dim i As Long
    For i = 1 To UBound(rngarr, 1)
        rngarr(i, 1) = Right(rngarr(i, 1), 4)
    Next i
    
    rng.Value = rngarr
End Sub

如果不想使用循环:

Sub right4()
    With ActiveSheet 'better to use actual worksheet ie Worksheets("Sheet1")
        Dim rng As Range
        Set rng = .Range("A2", .Cells(.Rows.Count, 1).End(xlUp))
  
        rng.Value = .Evaluate("INDEX(RIGHT(" & rng.Address(0, 0) & ",4),)")
    End With
End Sub

虽然我猜想第二个的时间会接近第一个代码的第二个。


推荐阅读