VBAmacros循环显示特定列中的值

我是VBA的新手,我想在代码下面进行复制,以便自动化这个过程

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

我已经编码如下所示,以显示'A'的第五列('F')偏移值

 Sub Gender1() ' ' Gender1 Macro ' ' =IF(A2="Male","M","F") Dim rCell As Range Dim rRng As Range Set rRng = Range("A2", Range("A2").End(xlDown)) For Each rCell In rRng.Cells If rCell.Value = "Male" Then result = "M" rCell.Offset(0, 5).Select ActiveCell.Value = result ElseIf rCell.Value = "Female" Then result = "F" rCell.Offset(0, 5).Select ActiveCell.Value = result Else result = "NULL" rCell.Offset(0, 5).Select ActiveCell.Value = result End If Next rCell End Sub 

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

我必须循环100000行

如果你正在处理1个行,我build议你采取另一种方法。

将列数据读入数组,并根据您的IF条件构造另一个数组,然后将结果数组一次写入到工作表中。

由于循环超过10万行需要时间,如果您与单元格交互,但arrays方法将花费不到一秒钟。

试试看这个区别…

当我在150000行数据上运行这个代码时,下面的代码花了不到一秒钟的时间。

 Sub Gender() Dim lr As Long, i As Long Dim x, y() lr = Cells(Rows.Count, 1).End(xlUp).Row x = Range("A2:A" & lr).Value ReDim y(1 To UBound(x, 1), 1 To 1) For i = 1 To UBound(x, 1) If x(i, 1) = "Male" Then y(i, 1) = "M" ElseIf x(i, 1) = "Female" Then y(i, 1) = "F" Else y(i, 1) = "NULL" End If Next i Range("F2").Resize(UBound(y), 1).Value = y End Sub 

为了模拟原始函数=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(),它是相当有效的,假设你正在使用范围。 如果真的需要效率,那么使用数组/变体在代码中进行操作往往是答案。