我是VBA的新手,我想在代码下面复制以自动化流程
@boook.image.url
我已将其编码如下,以显示'A'的第5列('F')偏移值
=IF(A2="Male","M","F")
我想了解方法是否正确并且应该使用偏移来显示值,还是有更好的方法来优化所需列中的代码和显示值。
我必须循环100 000行
答案 0 :(得分:2)
如果您正在处理1个lac行,我建议您采用另一种方法。
将A列数据读入数组并根据IF条件构造另一个数组,并将结果数组一次写入工作表。
如果您与单元格进行交互,则循环超过10万行将花费时间,但Array方法可能需要不到一秒钟。
尝试看看差异......
当我在150000行数据上运行此代码时,下面的代码花了不到一秒钟。
{{1}}
答案 1 :(得分:1)
要模仿原始函数=IF(A2="Male","M","F")
,以下代码可以正常运行:
Sub mimicIf()
Dim r As Range
Dim cell As Range
Set r = Range("A2")
Set r = Range(r, r.End(xlDown))
For Each cell In r
If cell = "Male" Then
cell.Offset(0, 5) = "M"
Else
cell.Offset(0, 5) = "F"
End If
Next cell
End Sub
但是,您的代码实际上是针对函数=IF(A2="Male","M",IF(A2="Female","F","Null"))
正如BruceWayne评论的那样,除非确实需要,否则应该避免使用.Select
和ActiveCell
。至于使用.offset(),假设您正在使用范围,它非常有效。但是,如果你真的需要效率,那么使用数组/变体在代码中进行操作通常就是答案。