Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: SVERWEIS dynamisch mit zwei Kriterien als VBA

SVERWEIS dynamisch mit zwei Kriterien als VBA
30.08.2017 13:36:09
Dom
Hallo zusammen,
leider scheitere ich aktuell an folgendem Problem:
Ich habe folgende Formel und möchte diese in VBA umsetzen
=SVERWEIS(B7;WENN(BL!$AD$3:$AD$325=$I7;BL!U3:AH325;““);14)
Ziel ist es das ganze dynamisch zu gestalten - sprich die Suche soll so lange ausgeführt warden bis spalte B keinen Wert enthält (was mit anderen Formeln soweit auch klappt. Nun Kommt leider für die oben beschriebene Formel ein Laufzeitfehler (13)...Finden jmd. den Fehler oder hat eine Idee?
VIELEN DANK!!!!!!!!!!!!
Sub Schaltfläche19_Klicken()
Dim Fläche As Long
Dim Geschoss As Long
Dim Vetragspartner As Long
Dim Etage As Long
Dim i     As Long
Set dataRng = Sheets("BL").Range("$S$3:$AJ$328")
Set dataRn = Sheets("BL").Range("$U$3: $AH$325")
Set dataUsg = Sheets("BL").Range("$AD$3:$AD$325")
Vertragspartner = ActiveCell.SpecialCells(xlLastCell).Row
'letzte Spalte ermitteln
i = 7
Do While i  "" Then
'ausführen Wenn Zelle einen Wert hat.
Sheets("Report").Cells(i, 10).FormulaLocal = Application.VLookup(Cells(i, 2),  _
Application.If((dataUsg) = (Cells(i, 9)), dataRn, """"), 14)
'Formel für Geschoss (=SVERWEIS(B7;WENN(BL!$AD$3:$AD$325=$I7;BL!U3:AH325;““);14)))
i = i + 1
'Zeile um 1 erhöhen um Endlosschleife zu vermeiden
Else
'Wenn Bedingung nicht erfüllt ist, dann ...
i = i + 1
'Zeile um 1 erhöhen
End If
Loop
'erneut durchlaufen / Ende
End Sub

Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
30.08.2017 13:43:02
Rudi
Hallo,
was soll das denn?
WENN(BL!$AD$3:$AD$325=$I7;BL!U3:AH325;““)
wie soll ein Bereich gleich einer Zelle sein?
FormulaLocal muss ein String sein, der eine Formel in der lokalen Sprache wiedergibt
Gruß
Rudi
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
30.08.2017 14:04:26
Dom
Hi Rudi, danke für deine Hilfe.
Habe diese Lösung für einen SVERWEIS mit zwei Kriterien online gefunden...als normale Formel funktioniert es einwandfrei. Aber wie gesagt, bekomme das Ding nicht als VBA.
Ziel ist es die Etage anhand der Hauptnutzung und des Jeweiligen Vertragspatners zu ermitteln.
Die Datenquelle befindet sich im Sheet "BL". Als Formel funktioniert
=SVERWEIS(B7;WENN(BL!$AD$3:$AD$325=$I7;BL!U3:AH325;““);14)
super. Aber wie gesagt wenn ich das ganze als VBA umschreiben möchte (siehe oben) scheitere ich,
Bin gerne offen für Alternativen und Ideen.
Ich habe den File mal angehängt (nicht wundern über die Formatierung, musste Ihn auf die Schnelle etwas zensieren)
https://www.herber.de/bbs/user/115891.xlsm
Wäre Super wenn mir jemand helfen könnte!
Anzeige
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
30.08.2017 14:15:05
SF
Hola,
Als Formel funktioniert...super
Na dann schreib in I7 mal etwas anderes als HA, z.B. HB. Dann kommt #NAME.
Warum als VBA? Sverweis mit 2 Kriterien geht doch super als Formel:
http://www.excelformeln.de/formeln.html?welcher=30
Gruß,
steve1da
Anzeige
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
30.08.2017 14:22:27
Dom
Hi steve1da -Danke Dir
okay, liegt daran, dass er HB nicht findet, last sich ja mit IFERROR umgehen.
VBA benötige ich, da ich das ganze über einen Butten aktualisieren möchte und die Formel nur angewendet warden soll, wenn in Spalte B befüllt ist (das passt alles). Ich scheitere wie gesagt nur daran eine Suche mit zwei Kriterien in VBA umzusetzten - Auch mit den beiden Varianten aus dem link...
Anzeige
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
30.08.2017 14:32:12
SF
Hola,
deine Formel kann allenfalls als Matrixformel funktionieren - ohne nicht.
Bei VBA bin ich leider raus.
Gruß,
steve1da
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
31.08.2017 09:04:36
ChrisL
Hi Dom
Die Formel habe ich nicht hinterfragt und ich habe jetzt mal FormulaArray verwendet. Das Makro macht zwar auch nichts anderes als die Formel einzusetzen, aber es geschieht mit VBA ;)
Sub Schaltfläche19_Klicken()
With Worksheets("Report")
With .Range("J7:J" & .Cells(Rows.Count, 9).End(xlUp).Row)
.FormulaArray = "=VLOOKUP(B7,IF(BL!$AD$3:$AD$325=$I7,BL!U3:AH325,""""),14,FALSE)"
.Value = .Value
End With
End With
End Sub
cu
Chris
Anzeige
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
31.08.2017 09:55:53
Dom
Hi Chris,
Vielen Dank funktioniert soweit super - nur leider kopiert er so immer die selbe Formel in die Zellen, sprich das ganze ist nicht dynamisch...kannst Du hier noch einmal helfen?
Vielen Dank!
Best Dom
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
31.08.2017 10:11:47
ChrisL
Hi Dom
Scheinbar funktioniert die Dynamik mit Array-Formeln nicht. Falls es wirklich eine Matrix-Formel braucht, dann müsstest du halt eine Schleife laufen lassen:
Sub Schaltfläche19_Klicken()
Dim c As Range
With Worksheets("Report")
With .Range("J7:J" & .Cells(Rows.Count, 9).End(xlUp).Row)
.ClearContents
For Each c In .Cells
c.FormulaArray = "=VLOOKUP(B" & c.Row & ",IF(BL!$AD$3:$AD$325=$I" _
& c.Row & ",BL!U$3:AH$325,""""),14,FALSE)"
Next c
.Value = .Value
End With
End With
End Sub

cu
Chris
Anzeige
Quatsch! Die Fml darf nur nicht einzeln in jede …
31.08.2017 21:13:27
Luc:-?
…Zelle eingetragen wdn, das wäre dann eine singulare (1zellig-1wertige) MatrixFml, Leute,
sondern in den ganzen Bereich, in dem sie stehen soll, auf einmal, falls sie eine plurale ist, also mehrere Werte in mehreren Zellen liefern soll. Falls das hier nicht der Fall sein sollte, liegt der Fehler daran, dass .FormulaArray R1C1-Fmln bevorzugt, was auch einiges erleichtern würde… ;->
Aber da mein letzter BT komplett ignoriert wurde, sehe ich keinen Grund, mich hier weiter zu engagieren…
Luc :-?
Anzeige
AW: Quatsch! Die Fml darf nur nicht einzeln in jede …
01.09.2017 08:59:32
ChrisL
Hi Luc
Unabhängig davon, welche Formel nun richtig ist. Folgende 3-Varianten getestet:
With GanzerBereich
.FormulaArray = "=VLOOKUP(RC[-8],IF(BL!R3C30:R325C30=RC9,BL!R[-4]C[11]:R[318]C[24],""""),14, _
FALSE)"
.FormulaArray = "=VLOOKUP(B7,IF(BL!$AD$3:$AD$325=$I7,BL!U3:AH325,""""),14,FALSE)"
.Formula = "=VLOOKUP(B7,IF(BL!$AD$3:$AD$325=$I7,BL!U3:AH325,""""),14,FALSE)"
End with
Variante 3 ergibt:
J7: =SVERWEIS(B7...
J8: =SVERWEIS(B8...
J9: =SVERWEIS(B9...
Variante 1+2 hingegen ergibt:
J7: =SVERWEIS(B7...
J8: =SVERWEIS(B7...
J9: =SVERWEIS(B7...
Da hilft auch die R1C1 Variante nicht.
cu
Chris
Anzeige
Viell liegt's ja auch an der Fml an sich, …
01.09.2017 19:20:55
Luc:-?
…Chris & Dom,
denn die ist mE verquer konstruiert. In Spalte J (GanzerBereich) sollte eher Folgendes eingetragen wdn:
.FormulaArray = "=IF(BL!R3C30:R325C30=RC9,VLOOKUP(RC[-8],BL!R[-4]C[11]:R[318]C[24],14,0),"""")"
Und das in alle relevanten Zellen! Ohne Manipulation der Adresse des 1.Arguments von SVERWEIS und der des VglsWerts. Dann ergibt sich auch die richtige ZellZuordnung! Manipulationen sind nur bei A1-Adressen erforderlich, weshalb R1C1 ja auch so praktisch ist, denn der Abstand der ErgebnisZelle von der variablen (relativ adressierten) QuellZelle für Suche und Vgl ändert sich ja nicht!
Luc :-?
Anzeige
AW: Viell liegt's ja auch an der Fml an sich, …
04.09.2017 08:36:56
ChrisL
Hi Luc
Das klingt eigentlich plausibel, aber die Bezüge sind auch bei dieser Variante fix (SVERWEIS(B7, B7, B7...):
Sub Schaltfläche19_Klicken()
With Worksheets("Report")
With .Range("J7:J" & .Cells(Rows.Count, 9).End(xlUp).Row)
.FormulaArray = _
"=IF(BL!R3C30:R325C30=RC9,VLOOKUP(RC[-8],BL!R[-4]C[11]:R[318]C[24],14,0),"""")"
'.Value = .Value
End With
End With
End Sub
Gemäss folgender Seite Ziffer 3.2 werden Varianten aufgezählt, um mit dem Problem umzugehen.
https://colinlegg.wordpress.com/2012/05/23/working-with-range-formulaarray-in-vba/
V1: Schleife
V2: Erste Zelle einsetzen und mit FillDown runter ziehen
V3: Erste Zelle einsetzen und mit Copy/Paste-Special runter kopieren
Meine bevorzugte Variante wäre die vierte Option:
Sub Schaltfläche19_Klicken()
With Worksheets("Report")
With .Range("J7:J" & .Cells(Rows.Count, 9).End(xlUp).Row)
.Formula = "=IF(BL!$AD$3:$AD$325=$I7,VLOOKUP(B7,BL!U3:AH325,14,0),"""")"
.FormulaArray = .FormulaR1C1
'.Value = .Value
End With
End With
End Sub
cu
Chris
Anzeige
Das erspart ungewohnte Notation... ;-] owT
05.09.2017 04:30:22
Luc:-?
:-?
AW: SVERWEIS dynamisch mit zwei Kriterien als VBA
30.08.2017 14:04:34
Dom
Hi Rudi, danke für deine Hilfe.
Habe diese Lösung für einen SVERWEIS mit zwei Kriterien online gefunden...als normale Formel funktioniert es einwandfrei. Aber wie gesagt, bekomme das Ding nicht als VBA.
Ziel ist es die Etage anhand der Hauptnutzung und des Jeweiligen Vertragspatners zu ermitteln.
Die Datenquelle befindet sich im Sheet "BL". Als Formel funktioniert
=SVERWEIS(B7;WENN(BL!$AD$3:$AD$325=$I7;BL!U3:AH325;““);14)
super. Aber wie gesagt wenn ich das ganze als VBA umschreiben möchte (siehe oben) scheitere ich,
Bin gerne offen für Alternativen und Ideen.
Ich habe den File mal angehängt (nicht wundern über die Formatierung, musste Ihn auf die Schnelle etwas zensieren)
https://www.herber.de/bbs/user/115891.xlsm
Wäre Super wenn mir jemand helfen könnte!
Anzeige
In einer MxFml kann fktn, was Rudi kritisiert, ...
30.08.2017 14:30:41
Luc:-?
niemals aber in VBA mit den entsprd WorksheetFunctions, Dom;
das ist ein Fehler, den Anfänger immer wieder machen! Auch als Xl-Profi sollte man sich schon mal Gedanken darüber gemacht haben, warum eine Fml überhpt fktioniert (zumal, wenn man pgmmieren will), denn sie ist ja eigentlich nur ein Text. Das =-Zeichen zu Beginn (neben +, - und @ vor FktsName) ist ja auch nur ein Hinweis an Xl, dass hier ein Text vorliegt, der interpretiert wdn muss. Und wenn ein ganzer Bereich gleich einem Skalar sein soll, also alle seine Zellen einzeln mit ihm vgln wdn sollen, wird der Xl-Fml-Interpreter das auch so handhaben, nicht aber VBA, denn damit wird die sichere Interpreter-Umgebung verlassen und man muss selbst an alles denken. Und damit kommt Rudis AW ins Spiel!
Außerdem hat dein Pgm noch etliche andere Macken. Hättest du nicht Application.If, sondern WorksheetFunction.If geschrieben, wäre dir wohl aufgefallen, dass der VBE-Intellisense das nicht im Bestand hat. Deshalb sollte man (vor allem als Anfänger!) erst dann nur Application.irgendeineXlStanddFkt schreiben, wenn man sicher sein kann, dass sie auch im WorksheetFunction-Container gelistet ist. Das ist bei Xl-Fktt, für die es weitgehend(st)e Entsprechungen in VBA gibt, idR nicht der Fall. Hier käme die vbFkt IIf infrage, falls nicht eine ihrer beiden AlternativZweige einen Fehler verursachen könnte. In diesem Fall würde nämlich der ganze Ausdruck nicht mehr fktionieren, denn die vbFkt ist nicht fehlertolerant, weil sie im Ggsatz zu WENN/IF immer alle Zweige berech­net und dann erst nach Argument1 auswählt!
Falls du dich auch in VBA unter die Fittiche des Xl-Interpreters begeben willst, musst du die vbFkt Evaluate mit US-Original-FmlText als Argument verwenden. Das dauert aber länger, da je nachdem welche Variante man benutzt, Worksheets("NN").Evaluate oder (Application.)Evaluate, dieser Ausdruck mindestens 2- oder 4-mal berechnet wird.
Gruß, Luc :-?
Besser informiert mit …
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

SVERWEIS mit zwei Kriterien dynamisch umsetzen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Arbeitsblatt oder öffne dein bestehendes Dokument.

  2. Vorbereitung der Daten: Stelle sicher, dass deine Daten im richtigen Format vorliegen. Du benötigst zwei Kriterien, um den SVERWEIS korrekt ausführen zu können. Diese sollten in einer Spalte als Hauptnutzung und in einer anderen als Vertragspartner vorhanden sein.

  3. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  4. Neues Modul einfügen: Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  5. VBA-Code einfügen: Verwende den folgenden Code, um den SVERWEIS mit zwei Kriterien dynamisch zu gestalten. Ersetze die Bereiche mit den entsprechenden Zelladressen aus deinem Arbeitsblatt.

    Sub Schaltfläche19_Klicken()
       Dim c As Range
       With Worksheets("Report")
           With .Range("J7:J" & .Cells(Rows.Count, 9).End(xlUp).Row)
               .ClearContents
               For Each c In .Cells
                   c.FormulaArray = "=VLOOKUP(B" & c.Row & ",IF(BL!$AD$3:$AD$325=$I" & c.Row & ",BL!U$3:AH$325,""""),14,FALSE)"
               Next c
               .Value = .Value
           End With
       End With
    End Sub
  6. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Führe das Makro aus, um die Berechnungen anzuwenden.


Häufige Fehler und Lösungen

  • Laufzeitfehler (13): Dieser Fehler tritt häufig auf, wenn ein Datentyp nicht übereinstimmt. Überprüfe die Zellformate in deinem Arbeitsblatt, um sicherzustellen, dass sie kompatibel sind.

  • #NAME?-Fehler: Dieser Fehler deutet darauf hin, dass Excel die Formel nicht erkennen kann. Stelle sicher, dass die Formel korrekt eingegeben ist und alle Zellbezüge stimmen.

  • Doppelte Werte: Wenn du die gleiche Formel in mehreren Zellen siehst, überprüfe, ob du die Formel als Array-Formel und nicht als normale Formel eingegeben hast.


Alternative Methoden

  • Matrixformeln: Du kannst auch Matrixformeln verwenden, um die Suche mit mehreren Kriterien durchzuführen. Matrixformeln können durch Drücken von STRG + UMSCHALT + ENTER aktiviert werden.

  • Verwendung von INDEX und VERGLEICH: Eine weitere Möglichkeit, einen doppelten SVERWEIS in Excel umzusetzen, ist die Verwendung von INDEX und VERGLEICH. Diese Methode kann flexibler sein und bietet dir mehr Kontrolle über die zurückgegebenen Werte.

    =INDEX(Bereich;VERGLEICH(1;(Kriterium1=Bereich1)*(Kriterium2=Bereich2);0))

Praktische Beispiele

  • Beispiel für SVERWEIS mit zwei Kriterien: Angenommen, du möchtest die Etage basierend auf Hauptnutzung (in Zelle I7) und Vertragspartner (in Zelle B7) ermitteln:

    =SVERWEIS(B7;WENN(BL!$AD$3:$AD$325=I7;BL!U3:AH325;"");14)
  • Verwendung von VBA zur Automatisierung: Wenn du die Suche für eine große Datenmenge automatisieren möchtest, kannst du die oben genannte VBA-Methode verwenden.


Tipps für Profis

  • Nutze Fehlerbehandlung: Füge in deinem VBA-Code On Error Resume Next hinzu, um Laufzeitfehler zu vermeiden.

  • Verwende benannte Bereiche: Benannte Bereiche vereinfachen die Handhabung von Zellreferenzen und erhöhen die Lesbarkeit deiner Formeln.

  • Optimierung der Leistung: Reduziere die Anzahl der Berechnungen, indem du nur die Zellen aktualisierst, die sich geändert haben, anstatt ganze Bereiche.


FAQ: Häufige Fragen

1. Wie kann ich den SVERWEIS mit zwei Bedingungen in Excel implementieren?
Du kannst den SVERWEIS in Kombination mit der WENN-Funktion verwenden, um mehrere Kriterien zu prüfen.

2. Warum funktioniert meine VBA-Implementierung nicht?
Stelle sicher, dass du die richtigen Zellbezüge verwendest und dass die Datenformate kompatibel sind.

3. Gibt es eine Alternative zu SVERWEIS?
Ja, du kannst INDEX und VERGLEICH verwenden, um flexibler mit mehreren Kriterien umzugehen.

4. Wo finde ich Hilfe für komplexe VBA-Fehler?
Foren wie das Excel-Forum oder Stack Overflow sind großartige Ressourcen, um spezifische VBA-Probleme zu lösen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige