0

我在 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 不会对这样的简单代码进行一些优化吗?

4

2 回答 2

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
于 2013-09-23T10:21:49.083 回答
3

你真的需要VBA吗?如果你愿意,你可以使用 Excel 的 Text To Columns

假设Excel中的数据是这样的

在此处输入图像描述

  1. 选择您的列并单击数据 | 文本到列
  2. Fixed Width在第 1 步(共 3 步)中选择
  3. 在第 2 步(共 3 步)中设置长度。如果您在下面看到,我已将其设置为10
  4. 单击完成,您就完成了。

在此处输入图像描述

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

在此处输入图像描述

如果您仍然需要 VBA 解决方案,那么我建议您按照@assylias 的建议将整个范围加载到数组中,然后在执行计算后将其放回原处。

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

于 2013-09-23T10:57:14.823 回答