Anzeige
Archiv - Navigation
1576to1580
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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 :-?
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

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige