LibreOffice oder Excel: Finde ALLE Ergebnisse, nicht nur das erste!

mr hyde

Lieutenant
Registriert
Okt. 2012
Beiträge
1.009
Hallo.
Ich habe hier eine Tabelle von Umfrageergebnissen. Heruntergebrochen auf ein Minimalbeispiel:

Zur Wahl standen 10 Wahloptionen. ZelleA1: "Wahloption1", ZelleB1: "Wahloption2" usw. bis Zelle J1.
Es mussten GENAU 3 Optionen gewählt werden.
Für jede Wahloption steht das Ergebnis in Zeile 2: Die Zahl 1 für gewählt, die Zahl 0 für nicht gewählt.
Ich habe also in Zeile 2 einen Zeilenvektor aus 0 und 1, mit genau 3 Einsen und 7 Nullen.

Ich brauche nun 3 Spalten, z.B. L,M,N, in denen genau DIE DREI Optionen aufgeführt sind, die gewählt wurden.
z.B. L2: "Opt3", M2: "Opt4", N2: "Opt6".

Also ungefähr so:

Screenshot 2023-03-07 100021.png


Wie kriege ich die Formeln für L, M, N entsprechend hin?
Mit Vergleich, WVERWEIS, etc. bekomme ich ja immer nur den ersten Treffer, hier im Bsp. Zelle C2, aber nicht die anderen....
 
Hola,
=INDEX($A$1:$J$1;AGGREGAT(15;6;SPALTE($A$1:$J$1)/($A$2:$J$2=1);SPALTE(A1)))
Gruß,
steve1da
 
  • Gefällt mir
Reaktionen: N00bn00b
PERFEKT!

Ich probiere da jetzt ne Stunde rum, google mir n Wolf, und hier wirds in 2 Min gelöst.

Muchas gracias!
 
  • Gefällt mir
Reaktionen: N00bn00b
Gerne!
In 365 gehts noch kürzer:
=FILTER(A1:J1;A2:J2=1)
 
  • Gefällt mir
Reaktionen: N00bn00b
365 habe ich nicht.

Rückfrage 1: Was macht genau der Teil "SPALTE($A$1:$J$1)/($A$2:$J$2=1)" ?
SPALTE($A$1:$J$1) gibt "1" aus, das ist soweit klar. Aber der hintere Teil??

Rückfrage 2: Ich scheitere daran, die Formel auf den Spaltenbereich H bis Q zu übertragen (in meinem Bsp. war das A bis J). Einfach nur die Buchstaben ändern genügt nicht. Ausgabe: #WERT! Was muss ich dabei beachten?
 
Spalte(A1:J1) ist einfach die Größe des Bereichs, den die Formel überwachen muss, nicht der Bereich selber.
Aktuell gehen die Daten von A1 bis J1, das sind 10 Spalten. Also schreibt man Spalte(A1:J1), also 1-10.
Wenn das jetzt also von H bis Q geht, würde die Formel lauten:
=INDEX($H$1:$Q$1;AGGREGAT(15;6;SPALTE($A$1:$J$1)/($H$2:$Q$2=1);SPALTE(A1)))
Man könnte auch schreiben:
=INDEX($H$1:$Q$1;AGGREGAT(15;6;SPALTE($H$1:$Q$1)-7/($H$2:$Q$2=1);SPALTE(A1)))

Und der hintere Teil fragt einfach nur ab, ob in Zeile 2 1er stehen.
 
Ich danke abermals :-) Funktioniert. Die Bedeutung des Schrägstrichs ist mir zwar nicht klar (ein Divisionszeichen ist es hier doch nicht, oder?), aber es geht :-)
 
Vorab: Die Formel funktioniert. Mein Problem ist gelöst.
Ich möchte jetzt nur ein bisschen besser verstehen, was diese Formel eigentlich tut. So als Lerneffekt.

Ich habe jetzt etwas mehr verstanden!

($H$2:$Q$2=1) gibt WAHR aus, wenn 1 gefunden wird, ansonsten Falsch.
SPALTE($A$1:$J$1) gibt immer 1 aus.
Wenn ich 1 durch WAHR teile, ist das Ergebnis 1 (WAHR wird wie 1 behandelt, und 1/1 = 1)
Wenn ich 1 durch FALSCH teile, ist das Ergebnis Div0 (FALSCH wird wie 0 behandelt, 1/0 ist nicht def.)

Was ich vorher nicht verstanden hatte, ist, was ($H$2:$Q$2=1) ausgibt, und dass ich mit boolsch. Werten so rechnen kann, auch nicht. Jetzt ist klar.

Den letzten Teil verstehe ich auch. Bei dir steht: Spalte(A1). Das ist 1, denn die zu A1 zugehörige Spaltennummer ist 1. Wenn ich die Formel nach rechts ziehe, wird daraus Spalte(B1) (das ist 2) und Spalte(C1) (das ist 3). Ich könnte also auch jeweils 1 , 2 , 3 direkt eintragen. Habe ich probiert, geht auch. Ist auch logisch, denn AGGREGAT(15 liefert ja den k-kleinsten Wert, also erst den kleinsten (wenn letztes Argument = 1), dann den 2.-kleinsten, dann den 3-kleinsten).

=================

Und jetzt (!) hab ich auch den Rest verstanden.

Screenshot 2023-03-07 100021.png

SPALTE($A$1:$J$1)/($A$2:$J$2=1)

nimmt jetzt quasi im 1. Durchlauf Spalte(A1)=1 und prüft, ob A2=1 -> FALSCH, dividiert dann 1/0 und bekommt Div/0.
Im 2. Durchlauf Spalte(B1)=2 und prüft, ob B2=1 -> FALSCH, dividiert dann 2/0 und bekommt Div/0.
Im 3. Durchlauf Spalte(C1)=3 und prüft, ob C2=1 -> WAHR, dividiert dann 3/1 und bekommt 3.
Im 4. Durchlauf Spalte(D1)=4 und prüft, ob D2=1 -> WAHR, dividiert dann 4/1 und bekommt 4.
...
Im 6. Durchlauf Spalte(F1)=6 und prüft, ob F2=1 -> WAHR, dividiert dann 6/1 und bekommt 6.
...
Im 10. Durchlauf Spalte(J1)=10 und prüft, ob J2=1 -> FALSCH, dividiert dann 10/0 und bekommt Div/0.

Ich stelle mir an dieser Stelle einen Ergebnisvektor (3 , 4 , 6) vor.
AGGREGAT(15;6; .... ; 1) sucht dann aus dem Ergebnisvektor den kleinsten Wert, Ausgabe 3.
AGGREGAT(15;6; .... ; 2) sucht dann aus dem Ergebnisvektor den 2.-kleinsten Wert, Ausgabe 4.
AGGREGAT(15;6; .... ; 3) sucht dann aus dem Ergebnisvektor den 3.-kleinsten Wert, Ausgabe 6.

INDEX($A$1:$J$1 ... gibt mir dann jeweils die 3., 4. und 6. Stelle des Vektors A1:J1 aus, meine Spaltenüberschriften.

Clever gelöst.

Nochmal danke!
Edit: Der Fachbegriff hier ist wohl "Array". Ich habe in Excel noch nie mit Arrays gearbeitet, deswegen ist es mir wohl so schwer gefallen, den Durchblick zu kriegen. Muss ich mich mal einlesen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: N00bn00b
Zurück
Oben