【发布时间】:2016-06-16 14:24:32
【问题描述】:
这里只是一个效率问题。我本质上是循环遍历列中的单元格以查看它们是否包含特定字符串,但是该单元格也需要不包含 14 个不同字符串中的任何一个。我当前的解决方案是找到字符串,然后在单元格上使用 instr 循环遍历数组。但是,当宏运行时,这可能会发生数百次。我很好奇是否有更好的方法。
例如:
NotArr = Array("blah1", "blah2", "blah3", "etc")
For r = 1 to 10
'Let's assume I've already found the first string
For i = 1 to 4
If Not InStr(Cells(r, 1).value, NotArr(i)) > 0 Then
'Do things
End If
Next i
Next r
注意:我知道我可能想多了,或者只是错过了显而易见的事情。我已经在 VBA 中埋葬了大约 6 周 @ 每天 10 小时,我能感觉到我的大脑正在融化。
谢谢大家!
【问题讨论】:
-
如果您也将范围放入数组中,您可以使其更快,因此您不会多次返回工作表。或者至少将每个单元格的值放在一个变量中并进行测试,它还会减少您在工作表上引用单元格的次数。
-
与工作表交互(在宏中使用
Cells())多次减慢宏。您可以将要搜索的范围保存在一个数组中,然后在宏中使用数组来提高速度。还有一些基本的东西,比如在手动模式下保持计算和关闭屏幕更新。 -
谢谢大家,这很有帮助。它已经更快了!
-
我会说没关系。如果您想尝试获得一点点性能,可以尝试将 Cell 的值保存到字符串变量中,这样就不必一遍又一遍地引用该单元格。