2017-10-24 1 views
1

Ich möchte eine Lookup-Formel in Worksheet-Funktion konvertieren, aber es fordert Type mismatch Fehler.LOOKUP Formel, um den letzten Wert in VBA zu finden

Diese Formel funktioniert gut.

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

Dies fordert Type mismatch Fehler

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

ich letzten Wert aus einer Spalte Nachschlag will so Vlookup Formel nicht auf es funktioniert. Wie kann ich den Fehler beheben?

+0

Ihre Formel sieht wie eine Array-Formel aus. Sie können Array-Formeln nicht in VBA verwenden. – Variatus

+1

@Variatus - Sie können entweder die 'FormulaArray'-Eigenschaft oder die' Evaluate'-Methode verwenden. – SJR

+0

@SJR Ja, tatsächlich. Daran habe ich nicht gedacht. – Variatus

Antwort

1

Die 'trick' you are using with the LOOKUP function wird nicht leicht in VBA übersetzen. Sie können eine einfache Find Methode mit umgekehrter Suchreihenfolge (Parameter SearchDirection:=xlPrevious) verwenden, die die letzte Übereinstimmung findet und dann die Offset Funktion verwendet, um über die Spalten zu gehen, um den gewünschten Wert zu erhalten.

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 
+0

Ich möchte den letzten Wert aus einer Spalte suchen, damit die Vlookup-Formel nicht funktioniert. Die erste Formel funktioniert gut, aber ich möchte sie nur in VBA-Code konvertieren. – Adnan

Verwandte Themen