我是VBA的新手,我想复制以下代码以使过程自动化
=IF(A2="Male","M","F")
我已将其编码如下,以在“ A”的第5列(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来显示值,还是有更好的方法来优化代码并在所需列中显示值。
我必须遍历10万行
最佳答案
如果您要处理1个紫胶行,我建议您采用另一种方法。
将列A的数据读入一个数组,并根据您的IF条件构造另一个数组,然后将结果数组立即写入到工作表中。
如果您要与单元格进行交互,那么循环遍历10万行将花费一些时间,但是Array方法可能会花费不到一秒钟的时间。
尝试一下以了解区别...
当我在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