Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03418.jsonl.gz/1441

Excel hat viele verschiedene Formeln, mehr als eine einzelne Person je verwenden kann. Formeln wie SVERWEIS und die INDEX-, VERGLEICH-Formeln werden am häufigsten verwendet. Eine normale INDEX-VERGLEICH-Formel oder der SVERWEIS sucht einen Wert anhand eines Kriteriums in einer Liste. Aber was ist wenn nach mehr als einem Kriterium gesucht werden soll?
Index-Vergleich mit 2 Kriterien
Die Formel kann weiterhin verwendet werden. Es sind nur ein paar Anpassungen erforderlich.
Wie unten im Screenshot zu sehen ist, haben wir zwei Kriterien, um nach dem Umsatz zu suchen.
Die Formelsyntax lautet:
=INDEX(such_bereich;VERGLEICH(1;INDEX((kriterium1=kriterien_bereich1)*(kriterium2=kriterien_bereich2);0;1);0))
Erläuterung:
Gerne erläutern wir die Formel anhand dieses Beispiels. Wir haben eine Liste mit Namen, Städte und einem Umsatz. Uns interessiert, wieviel Umsatz hat Frau Meier aus Frauenfeld gemacht.
Da es mehrere “Meier” gibt und mehrere Personen aus Frauenfeld, kann nicht einfach der SVERWEIS oder die “normale” INDEX/VERGLEICH-Formel verwendet werden. Wir schreiben die Formel so:
Wir verwenden hier die Indexformel, die innerhalb der Vergleich-Formel verwendet wird. Wenn wir innerhalb der Vergleichs-Formel die Index-Formel auswerten, ist Folgendes ersichtlich. WAHR bedeutet, dass das Kriterium gefunden wurde.
Wenn nun der erste Teil der Formel angesehen wird, dann ist ersichtlich, dass in der Liste die ersten drei Namen Treffer sind. Im zweiten Teil der Formel ist ersichtlich, dass der zweite und der fünfte Eintrag ein Treffer ist.
Indem wir beide Arrays multiplizieren, ergibt es nur beim zweiten Eintrag einen übereinstimmenden Treffer.
Dies bedeutet beim zweiten Eintrag ist der gesuchte Wert. Wenn Sie dieses Prinzip verstanden haben, können Sie die Formel nun beliebig erweitern.
Hier ist die Beispiel-Datei zum downloaden: Beispiel mehrere Kriterien Index Vergleich
Index-Vergleich mit mehr als 2 Kriterien
Die Formel kann auch mehr als 2 Kriterien haben. Wir müssen lediglich eine weitere Array in den Index einfügen:
=INDEX(such_bereich;VERGLEICH(1;INDEX((kriterium1=kriterien_bereich1)*(kriterium2=kriterien_bereich2)*(kriterium3=kriterien_bereich3);0;1);0))
Weitere Informationen über Excel-Dropdowns finden Sie hier und Informationen über Web-Apps finden Sie hier.
Benötigen Sie einen VBA Programmierer?
Wir als exact construct programmieren mit einem Team von rd. 20 Mitarbeitern seit über 10 Jahren Excel-Tools. Wir sind ein Nischenanbieter der spezialisiert auf Makros/VBA-Codes ist. Daneben unterstützen wir auch als 3rd Level Support die IT-Abteilungen rund um Probleme bei MS Office (Excel, Word, PowerPoint, etc.).
Haben Sie ein Excel-Problem? Benötigen Sie einen Makro-Programmierer? Rufen Sie uns unverbindlich an +41 52 511 05 25 oder kontaktieren Sie uns via Kontaktformular
25 Comments
Joachim Dahmen
Hallo Adrian,
kann es sein, dass in der Formel ein Fehler ist?
Bei mir funktioniert sie jedenfalls nicht, auch wenn ich Dein Beispiel exakt nachbaue und die Formel abschreibe.
Beste Grüße
Joachim
Adrian Frei
Hallo Joachim
Ich habe im Beitrag eine Excel-Datei mit dem Beispiel eingefügt. Schau dir die Formel da mal an.
Viele Grüsse
Adrian
Joachim
Herzlichen Dank Adrian,
jetzt hab ich die Formel verstanden und es funktioniert, auch bei mir 😉
Schöne Grüße
Joachim
Crisdean
Mega! Vielen Dank!
An Index und Vergleich hatte ich in meinem Problem schon gedacht, nur den zweiten Index hatte ich in meiner ursprünglichen Lösung nicht drin. Der Fehlte! 😀
Adrian Frei
😉
Kramer
Hallo Adrian,
danke für die Formeln. Kannst du bitte noch erklären, was die 0 und die 1 in der inneren INDEX-Formel bedeuten?
So wie ich es verstanden habe, bildet das erste Argument der INDEX Formel den Bereich, was bei dir das Array {0;1;0;0;0;0} ist.
Würde INDEX also mit dem zweiten Argument auf 0 die ganze Zeile und das dritte Argument auf 1 die erste Spalte wiedergeben?
Heißt das dann, dass mit den geschweiften Klammern, alle Einträge der Matrix in der gleichen Zeile und in der gleichen Spalte sind?
Dann könnte man, das dritte Argument ja eigentlich auf 0 lassen oder?
Außerdem habe ich probiert, “Müller” bei Frauenfeld auf “Meier” zu ändern und der Wert wird nicht mitgezählt. Die Formel scheint also nur den ersten Eintrag zu zählen, der beide Kriterien hat. Wie geht man damit um, wenn mehrere Einträge mit den beiden Kriterien vorhanden sind und man z.B. die Summe aus den Einträgen möchte?
Adrian Frei
Ich hoffe, dass ich deine Fragen richtig verstanden habe 😉
Die Array {0;1;0;0;0;0} bedeutet, bei welchen Zeilen ein Treffer vorhanden ist. Im konkreten Fall gibt es eine Übereinstimmung in der zweiten Zeile (beide Kriterien in der zweiten Zeile sind korrekt. Wenn in der Dritten Zeile ebenfalls Meier & Frauenfeld stehen würde, dann wäre das Ergebnis {0;1;1;0;0;0}.
Bezüglich deiner zweiten Frage: Ja, wie beim Sverweis auch, wird immer nur der erste Wert zurück gegeben. Wenn du mehrere Einträge suchst und dann diese Aufsummieren möchtest, dann wäre die Formel SUMMEWENNS die richtige Formel.
K2S
DANKE! DANKE! DANKE!!!!!
Adrian Frei
Immer gerne. Viele Grüsse Adrian
Tine
Hallo, erstmal vielen Dank für die Erklärung.
Ich verstehe leider eine Sache noch nicht: Warum gibst du in der Index-Formel im Vergleich nach dem Suchkriterium 0 für die Zeile und 1 für die Spalte ein?
Eine weitere Frage: Wie wäre die Lösung, wenn innerhalb einer Spalte eines von zwei alternativen Suchkriterien erfüllt sein sollte? In deinem Beispiel also entweder Müller oder Meier.
Vielen DAnk!
Adrian Frei
Antwort zur ersten Frage:
Der Parameter des Zeilenwerts definiert, wie viele Zeilen nach unten gehen (in diesem Fall nach rechts). Mit Null stellen wir sicher, dass er sich nicht bewegt. Der Wert 1 stellt nur sicher, dass er in der 1. Spalte steht. Da wir in diesem Fall nur ein eindimensionales Array-Ergebnis haben, hat es nur eine Spalte. Wir können den Parameter 1 auch einfach nicht in den Spaltenparameter eingeben, da es sich um ein optionales Argument handelt. Das Ergebnis wird sich dadurch nicht ändern.
Antwort zur zweiten Frage:
So funktioniert es:
=INDEX(C3:C8;VERGLEICH(1;INDEX((("Meier"=A3:A8)+("Müller"=A3:A8))*("Frauenfeld"=B3:B8);0;1);0))
Schnitzelmeister
Hallo, vielen Dank mal für den guten Beitrag.
Folgende Situation. Unten stehende FOrmel funktioniert, da ich jedoch zwei Argumente Abfrage (mit dem & Zeichen) ergibt sich ein Problem, wenn das erste Argument eine genaue Übereinstimmung benötigt und das zweite Argument größer gleich dem angegebenen Wert sein kann.
Also für
“[@d]” muss genau übereinstimmen und
“([@B]+10)” muss größer gleich sein.
Ich frage bei Wert b2 die Dicke eines Materials und bei B die Breite eines Materials ab. Die Dicke muss stimmen, die Breite kann auch größer sein.
Im Beispiel sollte er finden dicke 3,5 und 590 Breite und er findet mir aber leider schon vorher das mit 3,6x590er Blech
=INDEX(Tabelle3[NR1];VERGLEICH([@d]&([@B]+10);Tabelle3[Dicke1]&Tabelle3[Breite1];0))
Adrian Frei
Mit dieser Formel sollte es klappen:
=INDEX(Table1[Name];VERGLEICH(1;INDEX((F2=Table1[Dicke])*(G2>=Table1[Breite]);0;1);0))
Wichtig, da es sich um eine Matrix Formel handelt, drücke anschliessend Ctrl + Shift + Enter, damit die {} eingefügt werden.
Schnitzelmeister
Hallo, super ja so funktioniert es. Man muss nur folgendes noch beachten. Die Table1 aus deiner Formel muss so sortiert sein, dass zuerst die Dicke absteigend sortiert wird und danach die Breite aufsteigend. Dann funktioniert es. Besten Dank!!!
Adrian Frei
Freut mich zu hören, dass es geklappt hat.
Liliane
Hallo
Kann die Formel so angepasst werden, dass auch der Suchbereich dynamisch ist und die Spalte statt fix C3:C8 wie in der Beispieldatei “Beispiel-mehrere-Kriterien-Index-Vergleich” nach einem bestimmten Wert ausgewählt wird? Statt C3:C8 wäre das Suchkriterium “Umsatz” in der Zeile A2:D2 zu suchen.
Vielen Dank für die Hilfe!
Adrian Frei
Hallo Liliane
Mit der INDIREKT- und ADRESSE-Formel können wir dynamisch die Spalte “Umsatz” aus A2:D2 erhalten.
Du kannst C3:C8 durch diese Formel ersetzen
INDIREKT(ADRESSE(3;VERGLEICH("Umsatz";A2:C2;0))&":"&ADRESSE(8;VERGLEICH("Umsatz";A2:C2;0)))
In der ersten Adresse geben wir die erste Zeile an, die 3. Dann finden wir die Spalte Umsatz mit einem VERGLEICH, dann setzen wir “:” in die Mitte und suchen erneut die Spalte mit VERGLEICH und definieren die letzte Zeile, die 8. Um die Formel zum Ausführen zu bringen, müssen wir noch die INDIREKT-Formel schreiben.
Die vollständige Formel lautet:
=INDEX(INDIREKT(ADRESSE(3;VERGLEICH("Umsatz";A2:C2;0))&":"&ADRESSE(8;VERGLEICH("Umsatz";A2:C2;0)));VERGLEICH(1;INDEX(("Meier"=A3:A8)*("Frauenfeld"=B3:B8);0;1);0))
Viele Grüsse
Adrian
Liliane
Hallo Adrian
Vielen herzlichen Dank für die rasche Antwort und deine Top-Hilfe 🙂
Viele Grüsse
Liliane
Matthias
Hallo Ich versuche mittels dieser Funktion Daten aus einer flachen Datentabelle abzurufen ca. 300.000 Zeilen (2Kriterien) . Die Funktion bringt regelmäßig meine Excelinstanz zum Abstürzen. Auch die CPU-Belastung ist enorm (8 Threads und trotzdem mehrere Minuten Laufzeit) Gibt es eine Alternative?
Adrian Frei
Hallo Matthias
Versuch doch mal PowerQuery. Hier haben wir diverse Artikel betreffend PowerQuery: https://www.excel-hilfe.ch/archives/ Mit PowerQuery sollte es eigentlich problemlos möglich sein.
Viele Grüsse
Adrina