Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
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
SVerweis mit mehreren Kriterien als Mark
06.12.2021 13:04:01
Dom
Hallo,
ich habe in Spalte einen Sverweis mit mehreren Suchkriterien mit folgender Formel eingefügt. =SVERWEIS($A5&$B5&$D5;WAHL({1.2.3};Tabelle2!$A$3:$A$1000&Tabelle2!$B$3:$B$1000&Tabelle2!$D$3:$D$1000;Tabelle2!$E$3:$E$1000);2;FALSCH)
Diese Formel macht auch was sie soll und funktioniert grundsätzlich ohne Probleme.
Allerdings wird die Tabelle sehr lang werden und die 1.000 Zeilen in denen gesucht wird reichen schon nicht mehr aus. Je mehr Zeilen allerdings durchsucht werden, desto langsamer wird die ganze Tabelle. Daher ist die Formel so nicht zu gebrauchen.
Meine Idee ist ein Makro zu schreiben, der genau das macht was die Formel macht, allerdings erst auf Knopfdruck (Schaltfläche).
Wie sähe dafür der Code im VBA aus?

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

Betreff
Datum
Anwender
Anzeige
AW: SVerweis mit mehreren Kriterien als Mark
06.12.2021 13:19:42
Klaus
Hallo Dom,
leider keine Musterdatei, keine Spaltenangaben ... so kann ich nur grob helfen.
Makro-Rekordere einmal die Formel. Das könnte dann so aussehen, je nachdem wo du die Formel plazierst:

ActiveCell.Formula2R1C1 = _
"=VLOOKUP(R[-4]C1&R[-4]C2&R[-4]C4,CHOOSE({1.23},Tabelle2!R3C1:R1000C1&Tabelle2!R3C2:R1000C2&Tabelle2!R3C4:R1000C4,Tabelle2!R3C5:R1000C5),2,FALSE)"
Das ganze baust du dann in ein Makro ein:

Sub Makro1()
Dim lRow As Long
With Tabelle1
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("G1:G" & lRow).FormulaR1C1 = "=VLOOKUP(R[-4]C1&R[-4]C2&R[-4]C4,CHOOSE({1.23},Tabelle2!R3C1:R1000C1&Tabelle2!R3C2:R1000C2&Tabelle2!R3C4:R1000C4,Tabelle2!R3C5:R1000C5),2,FALSE)"
.Range("G1:G" & lRow).Value = .Range("G1:G" & lRow).Value
End With
End Sub
Je nachdem wo deine Formel stehen soll und aus welcher Spalte die letzte Zeile ermittelt wird musst du das natürlich umschreiben.
Einfacher wäre es alllerdings, schlicht die automatische Berechnung abzuschalten und per F9 zu rechnen, wenn du Zeit hast und Ergebnisse brauchst. Das ginge dann völlig ohne VBA.
LG,
Klaus M.
Anzeige
AW: SVerweis mit mehreren Kriterien als Mark
06.12.2021 13:22:11
UweD
Hallo
ohne VBA
Bei deiner 365 er Version kannst du mal die neue Filter-Funktion versuchen.

=FILTER(Tabelle2!E:E;(Tabelle2!A:A=A5)*(Tabelle2!B:B=B5)*(Tabelle2!D:D=D5);"")
LG UweD
AW: SVerweis mit mehreren Kriterien als Mark
06.12.2021 14:29:36
Dom
Danke für die schnellen Antworten.
Hier der Datei Upload: https://www.herber.de/bbs/user/149617.xlsm
@UweD: Die neue Filter-Funktion funktioniert ebenfalls. Allerdings ist die Datei dadurch noch langsamer.
@Klaus M. Danke für den Code. Wie du vorgeschlagen hast, habe ich den Code aufgezeichnet. Dabei kam raus: "=IFNA(VLOOKUP(RC1&RC2&RC4,CHOOSE({1,2,3},BMI!R3C1:R6000C1&BMI!R3C2:R6000C2&BMI!R3C4:R6000C4,BMI!R3C5:R6000C5),2,FALSE),"""")"
(Achtung: "Tabelle2" in "BMI" umbenannt)
Vielleicht hilft dir die Datei im Anhang jetzt auch noch weiter.
Ergebnis soll in Spalte I im Tabellenblatt "Produktion" eingetragen werden.
Folgenden Gesamt Code habe ich nun erstellt:

Sub Makro1()
Dim lRow As Long
With Produktion
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
ActiveCell.Formula2R1C1 = _
.Range("I1:I" & lRow).FormulaR1C1 = "=IFNA(VLOOKUP(RC1&RC2&RC4,CHOOSE({1,2,3},BMI!R3C1:R6000C1&BMI!R3C2:R6000C2&BMI!R3C4:R6000C4,BMI!R3C5:R6000C5),2,FALSE),"""")"
.Range("I1:I" & lRow).Value = .Range("I1:I" & lRow).Value
End With
End Sub
An folgender Stelle tritt allerdings ein Fehler auf:
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Anzeige
AW: SVerweis mit mehreren Kriterien als Mark
06.12.2021 14:40:58
Klaus
Im Prinzip korrekt, nur ein paar Anfängerfehler drin. Es ist entweder with sheets("Produktion") oder with Tabelle1. Außerdem hast du eine Zeile zuviel aus dem Rekordercode mitgenommen. Wenn ich deine Tabelle ansehe gehe ich davon aus, die Formeln sollen ab I4 geschrieben werden und nicht ab I1.
All das korrigiert sähe es so aus und funktioniert bei mir:

Sub Makro1()
Dim lRow As Long
With Sheets("Produktion")
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("I4:I" & lRow).FormulaR1C1 = "=IFNA(VLOOKUP(RC1&RC2&RC4,CHOOSE({1,2,3},BMI!R3C1:R6000C1&BMI!R3C2:R6000C2&BMI!R3C4:R6000C4,BMI!R3C5:R6000C5),2,FALSE),"""")"
.Range("I4:I" & lRow).Value = .Range("I4:I" & lRow).Value
End With
End Sub
LG,
Klaus M.
Anzeige
AW: SVerweis mit mehreren Kriterien als Mark
06.12.2021 16:20:24
Dom
Hallo Klaus M.,
nochmals vielen Dank für die Hilfe!
Ich habe deinen Code kopiert und eingefügt. Es taucht kein Fehler mehr auf, allerdings wird der Eintrag auch nicht kopiert.
Hier nochmal die Datei: https://www.herber.de/bbs/user/149618.xlsm
Was könnte ich noch falsch gemacht haben?
Gruß!
funktioniert bei mir
06.12.2021 16:28:08
Klaus
Hi Dom,
kommentiere diese Zeile mal aus:
'.Range("I4:I" & lRow).Value = .Range("I4:I" & lRow).Value
dann siehst du dass es funktioniert wie es soll (es werden Formeln eingetragen). Dass die Formel kein Ergebnis zeigt scheint an den fehlenden Daten in der Mustertabelle zu liegen, versuch es mal auf deiner Mastertabelle.
Slow-Motion Feedback: Es werden x Formeln eingetragen, jede Formel ergibt "" (nix), der Zellbereich der Formeln wird mit "nix" überschieben: Es scheint so, als wäre nichts eingetragen worden - ist es aber, wenn auch nur für ganz kurz.
LG,
Klaus M.
Anzeige
AW: funktioniert bei mir
07.12.2021 08:47:37
Dom
Hallo Klaus M.,
habe es getestet und die Zeile wie von dir beschrieben auskommentiert. Tatsächlich werden dann die Formeln eingetragen.
Nehme ich allerdings die Auskommentierung wieder raus und kopiere die Daten (Spalten A - D) von Produktion zu BMI (damit es wirklich identisch ist) wird trotzdem nicht die Spalte I mit den Inhalten aus Spalte E gefüllt.
In der Masterdatei funktioniert es leider auch nicht.
Hier noch einmal die Datei: https://www.herber.de/bbs/user/149628.xlsm
Ich habe gerade keine Idee was ich noch falsch gemacht haben könnte.
Oder gibt es eine ganz andere Möglichkeit die Spalten A, B und D von zwei Tabellenblättern zu vergleichen und bei Übereinstimmung in einer Zeile von E (Tabelle BMI) zu I (Tabelle Produktion) zu kopieren?
PS: Deine Offtopic-Tipps habe ich jetzt auch umgesetzt.
Vielen Dank für die schnelle Hilfe!!!
Anzeige
AW: funktioniert bei mir
07.12.2021 08:49:06
Klaus
Hi Dom,
am Makro liegt es also nicht. Dann würde ich tippen: Deine Formel ist falsch?
LG,
Klaus M.
Hab mir mal erlaubt ...
07.12.2021 10:16:51
Klaus
... die Anfängerfehler zu korrigieren und den Übertrag BMI völlig anders zu gestalten. Schau mal ob dir diese Datei taugt:
https://www.herber.de/bbs/user/149630.xlsm
LG,
Klaus M.
AW: Hab mir mal erlaubt ...
07.12.2021 11:23:17
Dom
Ja das funktioniert so einwandfrei.
So kann man es natürlich auch machen :-D
Dafür fehlt mir einfach das Fachwissen. Ich helfe mir meistens über die Aufzeichnungsfunktion und Recherche in solchen Foren.
Aber vielen Dank. Damit hast du mir ein großes Stück weiter geholfen.
Die einzige Kleinigkeit, die mich noch etwas stört ist, dass in den Zeilen in denen auf dem BMI Blatt kein Eintrag gemacht wurde auf dem Produktion Blatt das nervige #NV auftaucht. Könnte man da noch irgendwo so etwas ähnliches wie =WennNV( ... ;" ") im Code einbauen, damit die Zellen einfach leer bleiben?
Gruß
Anzeige
AW: Hab mir mal erlaubt ...
07.12.2021 11:27:12
Klaus
Klar. Einfach ein "IsError" um die Formel in Makro1 herum basteln:

Sub Makro1()
Dim lRow As Long
With Sheets("Produktion")
lRow = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range("I4:I" & lRow).FormulaR1C1 = "=IFERROR(INDEX(BMI!C5,MATCH(RC1&RC2&RC4,BMI!C6,)),"""")"
.Range("I4:I" & lRow).Value = .Range("I4:I" & lRow).Value
End With
End Sub
LG,
Klaus M.
AW: Hab mir mal erlaubt ...
07.12.2021 11:53:21
Dom
Wunderbar.
So sollte es dann jetzt alles zufriedenstellend funktionieren!
Vielen vielen Dank!!
Wenn du jetzt noch ...
07.12.2021 14:48:58
Klaus
... Uwe's "FILTER()" Lösung statt meiner VERGLEICH Lösung in Makro1 einsetzt ist es richtig rund :-)
Danke für die Rückmeldung!
LG,
Klaus M.
Anzeige
AW: Wenn du jetzt noch ...
13.12.2021 11:05:12
Dom
Ja das kann man natürlich auch noch machen! ;-)
Eine andere Frage zu dieser Datei / zu dem Code habe ich noch:
Das Datum, dass aus der Textbox gelesen wird und in Spalte "A" eingefügt wird, hat kein korrektes Datumsformat.
Das äußert sich z.B. darin, dass ich beim Filter der Spalte "A" nicht du Datumsfunktionen habe.
Userbild
Wie kann ich das im Code anpassen, das es passt?
Danke & Gruß
Offtopic: VBA und Select
06.12.2021 14:49:02
Klaus
Hallo DOM,
offtopic:
du solltest lernen, auf allzuviele "Select" zu verzichten. Beispiel in deiner Userform1:

With Produktion
Range("B1048576").Select
Selection.End(xlUp).Select
ActiveCell.Offset(1, 0).Select
ActiveCell = ComboBox1.Text
End With
Davon abgesehen dass "With Prouktion" hier nichts macht, da es das Sheet intern nicht "Produktion" sondern "Tabelle2" heißt, geht dies auch in einer Zeile und ganz ohne Select:

Sheets("Produktion").Range("B1048576").End(xlUp).Offset(1, 0).Value = ComboBox1.Text
Das ist 100 mal schneller und bewegt außerdem den Cursor nicht, wodurch der Bildschirm auch nicht mehr so blöd flackert.
Offtopic2:
Benenne deine Objekte! Statt "Combobox1" solltest du das Objekt in "ComboBox_Datum" umbenennen und auch entsprechend referenzieren. Bei zwei, drei Objekten in der Userform mag das noch nicht nötig sein, aber wenn dein Code weiter wächst verlierst du sonst komplett den Überblick.
LG,
Klaus M.
Anzeige

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige