使用FIND函数返回VBA中的最后一个值

我正在尝试编写一个函数来search列,并返回包含最后一个匹配的单元格。

例如,如果我有单元格A5作为我的活动单元格

A1 -> Text A2 -> wefwqef A3 -> Text A4 -> eorbebr 

我想要通过数组search“文本”,并为它返回单元格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。

请帮忙! 这个代码有什么问题?

您可以使用数组来保存值,然后反向遍历数组,直到find您之后的值。

 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 

上面创build一个从ActivecellA1的数组。 然后,它从数组的最后一项search列A(数组的第一维)中提供的条件(在此场景Text )到第一条。 这使得它能够find最接近Activecell的匹配标准。