Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Verweis-Funktion in VBA

Verweis-Funktion in VBA
27.01.2021 18:21:53
Andl
Liebe VBA'ler
vll. könnt ihr mir helfen:
Habe folgende Formel - welche auch funktioniert:
VERWEIS(9;1/(B4:B31="Stand Abschlag");(C4:C31))
Nun würde ich diese gerne als VBA haben - komme aber nicht zurecht - bekomme hier eine Fehlermeldung Laufzeitfehler 13
RestAbschlag221 = Application.WorksheetFunction.Lookup(9, 1 / Tabelle14.Range("B4:B31") = "Stand Abschlag", Tabelle14.Range("C4:C31"))
Ideen?
Beste Grüße
Andl
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Verwende stattdessen die vbFkt Evaluate ...
27.01.2021 18:33:09
Luc:-?
…und den US-Original-FmlText, Andl,
denn in VBA fehlt den Xl-Fktt im WorksheetFunction-Container die Unterstützung durch den Xl-FmlText-Interpreter, der ggf Bereichsargumente, die die Xl-Fkt als EinzelWerte verlangt, entsprd variiert. In deiner Fml kommt hinzu, dass hier ein skalarer Wert durch die Werte eines Bereichs, also ein Array geteilt wdn soll, was die VBA-Syntax nicht erlaubt.
Gruß, Luc :-?
Anzeige
AW: Verwende stattdessen die vbFkt Evaluate ...
27.01.2021 18:55:04
Andl
Wo setze ich das Evaluate? Vor das Lookup? Kenne die Funktion nicht
Evaluate(Lookup(9, 1 / Tabelle14.Range("B4:B31") = "Stand Abschlag", Tabelle14.Range("C4:C31")))
Andere Ideen?
Die Fml muss Text sein, ...
27.01.2021 19:21:44
Luc:-?
…Andl:
… = ActiveSheet.Evaluate("Lookup(9,1/(Tabelle14!B4:B31=""Stand Abschlag""),Tabelle14!C4:C31)")
Ansonsten entspricht die vbFkt Evaluate im Prinzip der alten XLM-Fkt AUSWERTEN (dt Fml-Notation!), die nur noch in benannten Fmln (definierter Name!) verwendet wdn kann und dann ebenfalls eine Speicherung als .xlsm/b erfordert, damit die alten MakroBlätter hinzugefügt wdn. Und die vbFkt findet man in der VBE-Hilfe! Sie existiert als Methode von Application und Worksheet, wobei erstere doppelt so oft für ein Ergebnis aufgerufen wird wie die letztere Variante. Mögliches Weglassen von Application. bedeutet immer die erstere, berechnungsaufwendigere allgemeine Variante!
Luc :-?
Anzeige
AW: Verwende stattdessen die vbFkt Evaluate ...
27.01.2021 19:31:35
Daniel
Hi
Das Problem ist, hier liegt eine Matrixformel vor, die in einer Schleife berechnet werden muss.
Eine Excelformel in einer Zelle kann die Schleife automatisch bilden und die Formel berechnen, VBA kann das nicht automatisch, in VBA müsste man hier zur Berechnung des Ergebnisses eine For-Next-Schleife selber programmieren.
Wenn man dass vermeiden will, kann man sich von Evaluate die Formel berechnen lassen. Evaluate simuliert die Excelzelle in VBA.
Dazu muss man den Formel als Textstring so schreiben, wie sie in einem Englischen Excel in einer Zelle stehen würde, bzw so, wie wenn man mit .Formula die Formel in eine Zelle schreiben würde:
Also im Prinzip so:
ErgebnisVariable = Evaluate("Lookup(9,1/Tabelle14!B4:B31=""Stand Abschlag"",Tabelle14!C4:C31)"
Als Tabellblattname musst du die Bezeichnung auf dem Reiter verwenden.
Gruß Daniel
Anzeige
AW: Verwende stattdessen die vbFkt Evaluate ...
01.02.2021 17:07:18
Andl
Hallo Daniel und Luc,
vielen Dank hierfür - mit "Evaluate" hat das gut geklappt.
Besten Dank!
Andreas Schaible
;
Anzeige
Anzeige

Infobox / Tutorial

Verweis-Funktion in VBA nutzen


Schritt-für-Schritt-Anleitung

  1. Formel in Excel verstehen: Die ursprüngliche Excel-Formel lautet:

    =VERWEIS(9;1/(B4:B31="Stand Abschlag");C4:C31)

    Diese Formel sucht den Wert „Stand Abschlag“ im Bereich B4:B31 und gibt den entsprechenden Wert aus C4:C31 zurück.

  2. VBA-Funktionalität: Um diese Formel in VBA zu verwenden, musst du die richtige Syntax beachten. VBA unterstützt nicht alle Excel-Funktionen direkt.

  3. Evaluate nutzen: Du kannst die Evaluate-Funktion verwenden, um die Excel-Formel in VBA auszuführen. Der Code sollte folgendermaßen aussehen:

    ErgebnisVariable = Application.Evaluate("Lookup(9, 1/(Tabelle14!B4:B31=""Stand Abschlag""), Tabelle14!C4:C31)")
  4. Fehlerbehebung: Achte darauf, dass die Formel genau so eingegeben wird, wie sie in einer englischen Excel-Version erscheinen würde. Der Tabellenblattname muss genau dem Reiter entsprechen.


Häufige Fehler und Lösungen

  • Laufzeitfehler 13: Dieser Fehler tritt häufig auf, wenn die Syntax nicht korrekt ist. Stelle sicher, dass der Bereich und die Bedingungen korrekt angegeben sind.

  • Matrixformeln: Da VBA keine Matrixformeln automatisch verarbeitet, musst du sicherstellen, dass die Schleifen manuell implementiert werden, wenn du nicht Evaluate verwendest.

  • Falsche Bereichsangaben: Überprüfe, ob die angegebenen Zellbereiche korrekt sind und das richtige Tabellenblatt verwendet wird.


Alternative Methoden

Eine andere Methode, die du verwenden kannst, ist die Implementierung einer For-Next-Schleife. Hier ein Beispiel, wie du das umsetzen kannst:

Dim i As Integer
Dim ErgebnisVariable As Variant
For i = 4 To 31
    If Tabelle14.Cells(i, 2).Value = "Stand Abschlag" Then
        ErgebnisVariable = Tabelle14.Cells(i, 3).Value
    End If
Next i

Diese Methode ist nützlich, wenn du mehr Kontrolle über den Prozess benötigst oder spezifische Bedingungen hinzufügen möchtest.


Praktische Beispiele

Hier ist ein praktisches Beispiel, das die Verwendung der Evaluate-Funktion demonstriert:

Sub BeispielVerweis()
    Dim ErgebnisVariable As Variant
    ErgebnisVariable = Application.Evaluate("Lookup(9, 1/(Tabelle14!B4:B31=""Stand Abschlag""), Tabelle14!C4:C31)")
    MsgBox "Das Ergebnis ist: " & ErgebnisVariable
End Sub

Mit diesem Code wird das Ergebnis der Verweisfunktion in einer Message Box angezeigt.


Tipps für Profis

  • Nutzungsbedingungen beachten: Achte darauf, dass alle Zellbezüge im richtigen Format angegeben sind, um Laufzeitfehler zu vermeiden.

  • Debugging: Nutze die Debugging-Funktion in VBA, um zu überprüfen, an welcher Stelle der Code scheitert.

  • Optimierung: Wenn du häufig auf die Evaluate-Funktion zugreifst, kannst du die Ausführungsgeschwindigkeit verbessern, indem du den Code optimierst oder unnötige Berechnungen vermeidest.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Evaluate und WorksheetFunction?
Evaluate ermöglicht die Ausführung von Excel-Formeln als Textstrings, während WorksheetFunction direkt Excel-Funktionen in VBA aufruft.

2. Wie kann ich sicherstellen, dass die Formel korrekt interpretiert wird?
Achte darauf, die Formel genau so zu schreiben, wie sie in Excel erscheinen würde, insbesondere bei englischen Excel-Versionen.

3. Was mache ich, wenn ich einen Fehler erhalte?
Überprüfe deine Zellbezüge und die Syntax. Stelle sicher, dass alle Bereiche korrekt definiert sind und die Bedingungen stimmen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige