...

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. Mehrere Kriterien für eine INDEX VERGLEICH Formel

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

 

 

20 Kommentare zu „Mehrere Kriterien für eine INDEX-VERGLEICH-Formel“

  1. 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

    1. 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

  2. Herzlichen Dank Adrian,
    jetzt hab ich die Formel verstanden und es funktioniert, auch bei mir ;-)

    Schöne Grüße
    Joachim

  3. 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! :D

  4. 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?

    1. 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.

  5. 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!

    1. 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))

  6. 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))

    1. 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.

      1. 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!!!

  7. 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!

    1. 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

  8. 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?

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen
Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.