我正在尝试加快我的For循环,因为对于一些有很多行/列的工作表,它需要很长的时间。已经尝试了一些数组和字典,但我不明白。如何优化这段代码来检查单元格的内容,如果为真,则将新计算的内容插入到其他单元格中?非常感谢!
Pos = 1
lngWS = ws_Table.ListRows.Count
For Pos = Pos To lngWS
If ws_Table.DataBodyRange(Pos, Column_Date).Value2 <> vbNullString And _
ws_Table.DataBodyRange(Pos, Column_Verify).Value2 <> "OK" Then
ws_Table.DataBodyRange(Pos, Column_Year).Value2 = Year(ws_Table.DataBodyRange(Pos, Column_Date).Value2)
ws_Table.DataBodyRange(Pos, Column_Month).Value2 = Format(ws_Table.DataBodyRange(Pos, Column_Date).Value2, "MMMM")
ws_Table.DataBodyRange(Pos, Column_Compare_1).FormulaLocal = "=1+1"
ws_Table.DataBodyRange(Pos, Column_Compare_1).Value2 = ws_Table.DataBodyRange(Pos, Column_Compare_1).Value2
ws_Table.DataBodyRange(Pos, Column_Compare_2).FormulaLocal = "=2+2"
ws_Table.DataBodyRange(Pos, Column_Compare_2).Value2 = ws_Table.DataBodyRange(Pos, Column_Compare_2).Value2
End If
Next Pos
2条答案
按热度按时间3pmvbmvn1#
若要加快处理某个范围内的数据的速度,将数据从该范围复制到数组,处理该数组,然后将数据复制回该范围,这样会快得多。
这适用于包含多个单元格的区域:
处理数组之所以快,是因为它是内存中的数据结构,列表对象、范围或单元格是COM对象,引用COM对象需要很长时间。
我推荐的方法只引用COM对象2或3次,而您的示例中使用的方法或Tim威廉姆斯提出的解决方案对范围中的每一行引用COM对象多次。
sczxawaw2#
这可能会快一点: