Ich versuche, einen Wrapper für die INDEX/MATCH-Lookup-Methode zu erstellen (die schneller/besser als die normale SVERWEIS-Methode ist), indem Sie eine benutzerdefinierte Funktion erstellen und sie anschließend als Add-In laden.Warum gibt IfError einen Fehler zurück?
So weit so gut, aber mein gewünschtes Verhalten ist, dass, wenn der zu suchende Wert nicht gefunden wird, sollte es leer ("") und nicht #VALUE !. So versuche ich, die IfError Work zu verwenden, um diese auf die gleiche Weise zu erreichen, ich auf einem Excel-Sheet würde:
Function FastLookup(parLookupKey As Variant, parLookupRange As Range, parReturnRange As Range) As Variant
FastLookup = Application.WorksheetFunction.IfError(Application.WorksheetFunction.Index(parReturnRange, Application.WorksheetFunction.Match(parLookupKey, parLookupRange, 0)), "")
End Function
Auch dies noch gibt #VALUE! Wenn im parLookupRange-Bereich kein Wert gefunden wird.
Unnötig zu sagen, wenn ich = IFERROR (FastLookup (H6, E3: E6, F3: F6), "") direkt auf der Excel-Tabelle verwenden, funktioniert es.
Irgendwelche Ideen, wie man die VBA-Version von IfError funktioniert?
'Application.WorksheetFunction.Match' verursacht einen * VBA-Laufzeitfehler *, wenn keine Übereinstimmung gefunden wird - Sie können diesen Fehlertyp nicht mit' IfError' abfangen, sondern müssen die VBA-Fehlerbehandlung verwenden, wie in @scott craner's gezeigt Antworten. –