VBA将列读入数组,并基于两列的IF条件和值

正如@sktneer在我以前的查询中正确地build议在处理大数据时将数据读入数组。

我想通过范围A的数组读取到最后,如果A1中的值等于“L”,则将B1 + C1

我将这个公式转换为下面的代码=IF(A1="Male",C1+D1,FALSE)

 Sub ANewMacro() Dim lr As Long, i As Long, j As Long Dim c, d, x, y() lr = Cells(Rows.Count, 1).End(xlUp).Row x = Range("A1:A" & lr).Value c = Range("C1:C" & lr).Value d = Range("D1:D" & lr).Value ReDim y(1 To UBound(x, 1), 1 To 1) j = 1 For i = 1 To UBound(x, 1) If x(i, 1) = "L" Then y(i, 1) = c(i, 1) + d(i, 1) j = j + 1 ElseIf x(i, 1) = "S" Then y(i, 1) = c(i, 1) + d(i, 1) j = j + 1 Else y(i, 1) = "NULL" j = j + 1 End If Next i Range("B1").Resize(UBound(y), 1).Value = y End Sub 

代码工作正常,但想知道是否声明多个范围的方法是正确的,也是执行。

我必须循环100000行

你可以将整个数据读入一个单独的数组中,这个数组将被称为multidimensional array。

根据你现有的代码,你可以尝试这样的事情…

 Sub ANewMacro() Dim lr As Long, i As Long, j As Long Dim x, y() lr = Cells(Rows.Count, 1).End(xlUp).Row x = Range("A1:D" & lr).Value ReDim y(1 To UBound(x, 1), 1 To 1) j = 1 For i = 1 To UBound(x, 1) If x(i, 1) = "L" Then y(i, 1) = x(i, 3) + x(i, 4) ElseIf x(i, 1) = "S" Then y(i, 1) = x(i, 3) + x(i, 4) Else y(i, 1) = "NULL" End If j = j + 1 Next i Range("B1").Resize(UBound(y), 1).Value = y End Sub 

在上面的代码中,x(i,1)表示列A中的数据,x(i,3)表示列C中的数据,x(i,4)表示列D中的数据。

现在,如果列A是“L”或“S”,你正在执行相同的计算,所以你可以像下面这样replaceFor循环…

 For i = 1 To UBound(x, 1) If x(i, 1) = "L" Or x(i, 1) = "S" Then y(i, 1) = x(i, 3) + x(i, 4) Else y(i, 1) = "NULL" End If j = j + 1 Next i 

“F1”是公式单元格。 我相信你可以纠正。

 Sub ANewMacro() Dim lr As Long, i As Long, j As Long Dim c, d, x, y() lr = Cells(Rows.Count, 1).End(xlUp).Row x = Range("A1:D" & lr).Value 'c = Range("C1:C" & lr).Value 'd = Range("D1:D" & lr).Value ReDim y(1 To UBound(x, 1), 1 To 1) j = 1 For i = 1 To UBound(x, 1) If x(i, 1) = "Male" Then y(i, 1) = x(i, 3) + x(i, 4) Else y(i, 1) = False End If Next i Range("b1").Resize(UBound(y), 1).Value = y '<~~ "b1" your formula exist cell End Sub