我正在尝试编写一个搜索列并返回包含最后一个匹配项的单元格的函数。
例如,如果我将单元格 A5 作为我的事件单元格
A1 -> Text
A2 -> wefwqef
A3 -> Text
A4 -> eorbebr
我想在数组中搜索“文本”并返回单元格 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。
请帮忙!这段代码有什么问题??
最佳答案
您可以使用 array保存值,然后反向遍历数组,直到找到所需的值。
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
的匹配标准。 .
关于excel - 使用 FIND 函数返回 VBA 中的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31985083/