查找列中的所有值并检索数组中的地址

我想在VBA中使用.find函数来查找列中的值的实例,但是根据与find值相同的行上的条件进行计算。 这是有问题的,因为虽然我所寻找的价值可能是相同的,但是用来创造总分的标准是不同的。 因此,我将需要遍历列中find的所有值,我想知道如何做到这一点在vba中。 我知道findnext函数,但我永远不能得到它正常工作。

counted = Application.WorksheetFunction.CountIfs(cl.Range(finletter & "9:" & finletter & "317"), "Value", cl.Range("H9:H317"), wl.Range("A" & y.row).Value) 'Pol small low complex If counted > 0 Then MsgBox wl.Range("A" & y.row).Value If cl.Range("C" & y.row).Value < 3 And cl.Range("D" & y.row).Value = 1 And cl.Range("E" & y.row).Value = "Interim" Then wl.Range(y.Address) = 3.75 * counted 

这是一个例子。 假设我们正在A列中查找“LOVE”文本,并在这些行上处理数据:

 Option Base 1 Sub LookingForLove() Dim s As String, rng As Range, WhichRows() As Long Dim rFound As Range ReDim WhichRows(1) s = "LOVE" Set rng = Range("A1:A25") Set rFound = rng.Find(What:=s, After:=rng(1)) WhichRows(1) = rFound.Row Do Set rFound = rng.FindNext(After:=rFound) If rFound.Row = WhichRows(1) Then Exit Do ReDim Preserve WhichRows(UBound(WhichRows) + 1) WhichRows(UBound(WhichRows)) = rFound.Row Loop msg = UBound(WhichRows) & vbCrLf & vbCrLf For i = 1 To UBound(WhichRows) msg = msg & WhichRows(i) & vbCrLf Next i MsgBox msg End Sub 

在这里输入图像说明

注意:

  • Exit Do可以防止永久循环
  • 你的代码会继续循环WhichRows()的元素和处理这些行上的项目。
  • 你的代码也可以创build一个范围或单元格地址的dynamic数组。

另一种替代方法是使用VBAbuild立一个AutoFilter并处理可见的行。