LOOKUP公式来查找VBA中的最后一个值

我想将查找公式转换为工作表函数,但它会提示Type mismatch错误。

这个公式工作正常。

 =LOOKUP(2,1/(SalesDB!I6:I3005="FLOUR"),SalesDB!K6:K3005) 

这会提示Type mismatch错误

 ActiveSheet.Range("Q9").Value = Application.WorksheetFunction.Lookup(2, 1 / (Sheets("SalesDB").Range("$I$6:$I$3005") = "FLOUR"), Sheets("SalesDB").Range("$K$6:$K$3005")) 

我想查找列中的最后一个值,所以Vlookup公式不起作用。 我怎样才能解决这个错误?

您使用LOOKUP函数的“技巧”不会轻易转换为VBA。 您可以使用一个简单的Find方法,将search顺序颠倒过来(参数SearchDirection:=xlPrevious ),它将查找最后一个匹配项,然后使用Offset函数SearchDirection:=xlPrevious列来检索所需的值。

 Option Explicit Sub Test() ActiveSheet.Range("Q9").Value = LastVlookup("FLOUR", Sheets("SalesDB").Range("$I$6:$K$3005"), 3) End Sub Function LastVlookup(varLookup As Variant, rngData As Range, lngOffset As Long) As Variant LastVlookup = rngData.Find( _ What:=varLookup, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ SearchDirection:=xlPrevious).Offset(0, lngOffset - 1).Value End Function