LOOKUP公式,用于查找VBA中的最后一个值

时间:2017-10-24 09:52:52

标签: excel excel-vba excel-formula vba

我想将查找公式转换为Worksheet函数,但它会提示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公式不起作用。我该如何解决错误?

1 个答案:

答案 0 :(得分:1)

'trick' you are using with the LOOKUP function不会轻易转换为VBA。你可以使用一个简单的Find方法,反转搜索顺序(参数SearchDirection:=xlPrevious),找到最后一个匹配项,然后使用Offset函数遍历列以检索你的值想。

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