对VBA的表现感到失望

时间:2013-09-23 10:07:35

标签: excel vba excel-vba

我在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.ScreenUpdating = True
End Sub

我看不出这会如何变得更简单,但我对此代码片段的糟糕性能感到失望。 VBA不能对这样的简单代码进行一些优化吗?

2 个答案:

答案 0 :(得分:4)

尝试以下代码:

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

答案 1 :(得分:3)

你真的需要VBA吗?如果需要,可以使用Excel的文本到列

我们说Excel中的数据是这样的

enter image description here

  1. 选择您的专栏并点击数据|文本到列
  2. 在第1步(共3步)中选择Fixed Width
  3. 在第3步中设置您的长度。如果您在下面看到,我已将其设置为10
  4. 点击“完成”即可完成。
  5. enter image description here

    注意:如果第10个字符是SPACE,那么它将在第2行中被截断

    enter image description here

    如果您仍然想要一个VBA解决方案,那么我建议在@assylias建议的情况下将整个范围加载到数组中,然后在执行计算后将其重新放回。

    @Santosh还给了你一个建议,你可以一次性输入所有单元格。如果您可以使用非VBA选项,则可以手动输入单元格中的公式并执行自动填充:)