对VBA的表现感到失望
我在Excel中编写了一个非常简单的宏来删除一些多余的文本。代码如下:对VBA的表现感到失望,vba,excel,Vba,Excel,我在Excel中编写了一个非常简单的宏来删除一些多余的文本。代码如下: Sub remove_excess_names_from_part_number() Dim i As Integer Application.ScreenUpdating = False For i = 1 To 1000 Cells(i, 3).Value = Left(Cells(i, 3).Value, 10) Next i Application.Screen
Sub remove_excess_names_from_part_number()
Dim i As Integer
Application.ScreenUpdating = False
For i = 1 To 1000
Cells(i, 3).Value = Left(Cells(i, 3).Value, 10)
Next i
Application.ScreenUpdating = True
End Sub
我看不出这怎么会变得更简单,但我对这段代码的糟糕性能感到失望。VBA不是对这样的简单代码进行了一些优化吗?请尝试以下代码:
列C是结果列,数据在列A中
Sub remove_excess_names_from_part_number()
Application.ScreenUpdating = False
Dim lastRow As Long
lastRow = Range("A" & Rows.Count).End(xlUp).Row
Range("C1:C" & lastRow).FormulaR1C1 = "=Left(RC[-2],10)"
Application.ScreenUpdating = True
End Sub
你真的需要VBA吗?如果需要,可以使用Excel的文本编辑列 假设Excel中的数据如下所示 选择您的列并单击数据|文本到列 在第1步(共3步)中选择“固定宽度” 在第2步(共3步)中设置长度。如果你看到下面,我把它设为10 单击Finish,您就完成了。 注意:如果第10个字符是空格,则它将被截断,如第2行所示 如果您仍然需要VBA解决方案,那么我建议按照@Assylas的建议将整个范围加载到数组中,然后在执行计算后将其放回
@桑托什也给了你一个建议,当你可以一次输入所有单元格的公式。如果您可以使用非VBA选项,那么您可以在单元格中手动输入公式,并进行自动填充:与电子表格的交互速度非常慢:立即加载数据,对其进行操作,然后立即将其放回电子表格。哇,快多了!谢谢你的快速回答!有趣的解决方案,我不知道。谢谢我将测试哪种解决方案更适合我的需要。如果你对非VBA解决方案持开放态度,那么直接在电子表格中键入几千行公式,并进行自动填充是最好的选择。如果您有非常大的数据,那么与公式或VBA代码相比,文本到列的速度会更快。在尝试了几次之后,我不得不说这是一个非常好的解决方案,如果感兴趣的文本始终完全相同的话。