哪个更快,可变或直接访问单元格值?

时间:2011-09-14 12:18:17

标签: vba excel-vba excel

我有很多字符串操作,比如

1st one
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, ",", " ")
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, "/", " ")
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, "&", " ")
ActiveSheet.Cells(i, "B").Value = Replace(ActiveSheet.Cells(i, "B").Value, "(", " ")
2nd one
store=ActiveSheet.Cells(i, "B").Value
store= Replace(store, "/", " ")
store = Replace(store, "&", " ")
store = Replace(store, "(", " ")

和一些修剪操作,有时会查找字符串长度,有时还会进行比较。

我必须为1到4000的单元格进行循环。问题是将单元格值存储在字符串中并且访问更好更快?或者在宏中写入activesheet单元格值本身更快?

store = activesheet.cells(i,"B").value and use store everywhere 
or write activesheet.cells(i,"B").value everywhere?

哪个更好哪个更优化我有点想,如果我们提到它必须去单元格并将其取回,但如果我们将它存储在变量中那么它可能会更快。我只需要知道哪个更好?

1 个答案:

答案 0 :(得分:6)

访问Excel很慢。存储您在变量中访问两次以上的内容总是会更快,并且将一系列单元格(一次调用Excel)转储到变量数组中会更好。

请记住,Excel和VBA不一样。这就像两个人在同一个房间但不同的房间。每次访问Excel时,VBA都必须敲开Excel的大门。

<强>更新: 以上是所有代码的一般建议。关于上面的特定代码和你正在做的事情,使用Excel的搜索和替换范围的功能实际上可能更快,如下所示:

Sub test()

Application.ScreenUpdating = False
With Range("B1:B4000")
    .Replace what:="(", replacement:=" ", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    .Replace what:="&", replacement:=" ", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

    .Replace what:="/", replacement:=" ", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End With
Application.ScreenUpdating = True
End Sub