VBA宏循环显示特定列中的值

时间:2017-08-03 04:17:44

标签: excel vba excel-vba automation

我是VBA的新手,我想在代码下面复制以自动化流程

@boook.image.url

我已将其编码如下,以显示'A'的第5列('F')偏移值

=IF(A2="Male","M","F")

我想了解方法是否正确并且应该使用偏移来显示值,还是有更好的方法来优化所需列中的代码和显示值。

我必须循环100 000行

2 个答案:

答案 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评论的那样,除非确实需要,否则应该避免使用.SelectActiveCell。至于使用.offset(),假设您正在使用范围,它非常有效。但是,如果你真的需要效率,那么使用数组/变体在代码中进行操作通常就是答案。