Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对VBA的表现感到失望_Vba_Excel - Fatal编程技术网

对VBA的表现感到失望

对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

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

请尝试以下代码:

列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代码相比,文本到列的速度会更快。在尝试了几次之后,我不得不说这是一个非常好的解决方案,如果感兴趣的文本始终完全相同的话。