"zählenwenn" mehrere Zahlen in einer Zelle
#11
Es sollte noch erwähnt werden, dass die gezeigten Lösungen nur dann funktionieren, wenn die Symptom-Codes immer genau gleich lang sind.
Sollte dies nicht der Fall sein (z.b. bei mehr als 9 Symptomen Code 10, 11, 12 usw) dann besteht das Risiko, dass fehlerhaft gezählt wird, wenn nach einem Code gesucht wird, der kürzer ist. Wenn bspw nach dem Code 1 gesucht wird, würden die gezeigten Formeln auch 10, 11, 12, 21, 31 usw mitzählen.
Die Abhilfe wäre, dass man die Trennzeichen mit in die Suche einbezieht. Allerdings sollten dann auch die Zusammenstellung der Codes mit dem Trennzeichen anfangen und enden, damit hier keine Sonderfälle entstehen.
Die kann man aber auch per Formel hinzufügen:

=Summe(--IstZahl(Suchen(","&C1&",";","&$A$1:$A$10&",")))

in C1 steht der Symptomcode, der gezählt werden soll, in Spalte A stehen die Symptomcodes der Patienten.

Gruß Daniel
Antworten Top
#12
Die verketteten Krankheitscodes von 100 Personen stehen in B2:B101.

Angenommen, es gibt nun die Codes von 1 bis 80, also z.B. in B2: 2,4,43,65

E1[:E80]: =SUMMENPRODUKT(--(GLÄTTEN(TEIL(WECHSELN(B$2:B$101;",";WIEDERHOLEN(" ";99));SPALTE(A:Z)*99-98;99))=""&ZEILE(A1)))

herunterkopiert von E1:E80 hat man nun die Anzahlen der Krankheitscodes (=Excel-Zeilennummer) aller Beteiligten. A:Z bedeutet, dass 26 Codes pro Person möglich sind.

Mit den neuen Excelfunktionen lässt sich das natürlich auch ohne (bzw. mit höherer Begrenzung) darstellen.
Wehrdienst für nach 31.12.2007 geborene Männer. Freiwilligkeit wird nicht ausreichen; also gibt es das Losverfahren mit daraus mehr als 50% Dienstverpflichteten. Herzlichen Glückwunsch. (Ich habe 15 Monate in der Lw gedient). Weiße Jahrgänge der Bw also ca. -1937 und 1994-2007. Alternativen wie Zivildienst/Verweigerung/Soziales Jahr noch nicht besprochen.
Antworten Top
#13
Hallo,
 
mein Vorschlag dazu um die Erzeugung des Arrays xB dynamisch zu halten wäre so in B2:
Code:
=LET(xZ; B1:Z1;xZl; VERGLEICH(WAHR; ISTLEER(xZ); 0); xAnz; xZl - 1;
xA; FILTER(J2:J500; J2:J500<>"");
xB; SEQUENZ(xAnz);MATRIXERSTELLEN(ZEILEN(xA); xAnz;
  LAMBDA(pZ;pS; WENNFEHLER(WENN(ISTZAHL(SUCHEN(INDEX(xB; pS); INDEX(xA; pZ))); "X"; ""); ""))))

und in L2:
Code:
=LET(
  xÜz; B1:Z1;
  xAlz; VERGLEICH(WAHR; ISTLEER(xÜz); 0);
  xAls; SPALTE(INDEX(xÜz; xAlz - 1));
  xA; MTRANS(FILTER(xÜz; SPALTE(xÜz) <= xAls));
  xB; FILTER(BEREICH.VERSCHIEBEN(B2; 0; 0; 499; xAls - SPALTE(B1) + 1); A2:A500<>"");
  xC; LAMBDA(pS; SUMME(--(INDEX(xB;;pS)="X"))); xD; MAP(SEQUENZ(ANZAHL2(xA)); xC); HSTAPELN(xA; xD))
Das ist jetzt ausreichend dynamisch. Falls 500 Zeilen für FILTER() bzw. Spalte B bis Z zu wenig sind, kann man dies nach Bedarf weiter fassen. Wann die CPU raucht keine Ahnung.

Mit den Möglichkeiten O365 wird das sicher noch effizienter zu lösen sein. In O2024 gibt es dann doch noch ein paar Einschränkungen.

.xlsx   Mehrere Symptome.xlsx (Größe: 11,6 KB / Downloads: 4)

Gruß Uwe
Antworten Top
#14
BEREICH.VERSCHIEBEN ist keine geeignete (sondern fehlerträchtige) Funktion für die neuen Excel-(LAMBDA/LET)-Funktionen.
Wehrdienst für nach 31.12.2007 geborene Männer. Freiwilligkeit wird nicht ausreichen; also gibt es das Losverfahren mit daraus mehr als 50% Dienstverpflichteten. Herzlichen Glückwunsch. (Ich habe 15 Monate in der Lw gedient). Weiße Jahrgänge der Bw also ca. -1937 und 1994-2007. Alternativen wie Zivildienst/Verweigerung/Soziales Jahr noch nicht besprochen.
Antworten Top
#15
Hallo,

in diesem Falle eigentlich nicht. Aber kein Problem. Das wäre dann in der  Formel in L2 dann so: 
Code:
=LET(xÜz; B1:Z1;
  xAlz; VERGLEICH(WAHR; ISTLEER(xÜz); 0);
  xAls; SPALTE(INDEX(xÜz; xAlz - 1));
  xA; MTRANS(FILTER(xÜz; SPALTE(xÜz) <= xAls));
  xB; FILTER(B2:INDEX(B2:Z500; 499; xAls - SPALTE(B1) + 1); A2:A500<>"");
  xC; LAMBDA(pS; SUMME(--(INDEX(xB;;pS)="X")));
  xD; MAP(SEQUENZ(ANZAHL2(xA)); xC);
  HSTAPELN(xA; xD))

Gruß Uwe
Antworten Top
#16
Hallo,

wenn die Antwortlisten der 3 Personen in B2:B4 enthalten sind, genügt diese eine Formel:
Code:
=LAMBDA(AntwPers;N; LET(
cd; SEQUENZ(N); HSTAPELN(cd&"="; NACHZEILE(cd; LAMBDA(i; SUMME(--REGEXTESTEN(AntwPers; "(^|,)"&i&"(,|$)") ))))
))($B$2:$B$4; 6)
Gruß Anton.

Windows 11 64bit
Microsoft365 Insider 64bit
Antworten Top
#17
Hallo Anton,
 
Ich nutzte O2024. Da gibt es halt einige Funktionen nicht. Meine Hoffnung war Onlinexcel um mir deine Formel mal anzuschauen. 
Das olle Ding kanns leider auch nicht (eigentlich erwartbar), was mit meinem Account zusammenhängt.

Die beiden Formeln habe ich lediglich den noch fehlenden dynamischen Rest dazu gebaut, da dies zurecht bemängelt wurde. 

In der Beispiellösung hatte ich nur 3 Zeilen eingetragen. Man braucht also nur in J eine weitere Zahlenfolge einzugeben, damit sich die in die nächste Zeile spillt. 

Einzige kleine Fehlerquelle ist, dass in J keine Leerzelle zwischen den Einträgen stehen darf. 
Man kann auch dies noch einbauen, dass der leer erkannt wird und trotzdem entsprechend gespillt wird.
 
Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste