我正在尝试编写一个函数,通过列搜索并返回包含最后匹配的单元格。
例如,如果单元格A5是活动单元格
A1 -> Text
A2 -> wefwqef
A3 -> Text
A4 -> eorbebr
我想通过数组搜索'Text',并为它返回单元格A3,因为这是最后的匹配。
但是如果细胞A7是活动细胞
A1 -> Text
A2 -> wefwqef
A3 -> Text
A4 -> eorbebr
A5 -> fhyeher
A6 -> Text
那么它将返回A6作为我的结果。
我一直在玩FIND函数,试图让它工作,但我不断得到错误(应用程序或基于对象的错误)。
我的计划是将此代码作为更大循环的一部分执行,并且在每种情况下,它返回最接近活动单元格的值。(我希望这是有意义的)
这是我到目前为止的代码:
Range("A19:I19").Select
'ActiveCell.FormulaR1C1 = Sheets("Sheet1").Cells(9, 5).Value & ":5 CTs,
O/C " & _
'Sheets("Sheet1").Cells(9, 8).Value * 100 & "% @ " & _
'Sheets("Sheet1").Cells(9, 9).Value & " TM"
Dim Rng As Range
With Sheets("Sheet1").Range(Cells(9, 3), Cells(Line, 3))
Set Rng = .Find(What:="Primary", _
After:=.Sheets("Sheet1").Cells(Line, 3), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False)
我还想象,当我可以得到这个工作时,我会包括一个DO或IF语句,它会说,一旦值存储在Rng中,那么cellx = Rng。
请帮忙!这段代码有什么问题??
您可以使用数组来保存值,然后反向遍历数组,直到找到您要找的值。
Sub arrayFind()
Dim currRow As Long
Dim wb As Workbook, ws As Worksheet, rng as Range
Dim arrValues() As Variant
Dim i As Long
Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")
currRow = ActiveCell.Row
arrValues = Range("A1:A" & currRow)
For i = UBound(arrValues, 1) To LBound(arrValues, 1) Step -1
If arrValues(i, 1) = "Text" Then
set rng = Range(Cells(i, 1).Address)
Exit For
End If
Next i
End Sub
上面创建了一个从Activecell
到A1
的数组。然后,它从数组的最后一项到第一个项搜索列A(数组的维度1)以查找提供的条件(在本场景中为Text
)。这使它能够找到最接近Activecell
的匹配条件。