Ausgangslage:
Die Anzahl gültiger Buchstaben (oder allgemein: Zeichen) in einer Zelle soll ermittelt werden.
Schrittweise Lösung:
=SUMMENPRODUKT(--(CODE(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1));1)))>96))
ermittelt alles ab a - z, ä, ö, ü, ß, Ä, Ö und Ü. Leider aber auch die Zeichen 91-96, 123-128, 129-191, 215 und 247, die meist keine Buchstaben sind! Und leider kein A - Z! Aber langsam:
=SUMMENPRODUKT(
--(CODE(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1))>96);
--(CODE(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1))<123))
ergibt ein erstes Intervall, hier für a-z, aber ohne A-Z. Die mischen wir mittels KLEIN() hinzu:
=SUMMENPRODUKT(
--(CODE(KLEIN(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1)))>96);
--(CODE(KLEIN(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1)))<123))
Nun haben wir A-Z und a-z. Ärgern tun uns aber die beiden fast gleichen Terme für das Intervall. Wie bekommt man die weg? Folgende Idee:
---+----+----+----+----+-- vorher 100 105 110 115 120 --|----|----|----|----|--# nachher -10 -5 0 +5 +10Wir verlagern das Intervall um -109 Plätze symmetrisch um Null. Nun können wir mit "ABS()<13" 25 Werte eingrenzen, ohne eine zweite Begrenzung zu benötigen. Den 26ten Wert (siehe das #) bekommen wir ins Intervall, wenn wir von den Werten noch weitere 0,5 abziehen, also nun -109,5:
=SUMMENPRODUKT(
--(ABS(CODE(KLEIN(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1)))-109,5)<13))
Wir haben nun zwar immer noch nur A-Z und a-z, aber dafür eine viel kürzere "symmetrische Intervalldefinition", die nur einen Vergleich benötigt, statt zwei. Da SUMMENPRODUKT nicht nur Vektoren (hier der Spaltenvektor ZEILE()), sondern auch Matrizen auswertet, haben wir noch Platz, die Vergleichswerte in der Zeile zu erweitern:
=SUMMENPRODUKT(
--(ABS(CODE(KLEIN(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1)))
-{109,5.154.156.158.223.235.251,5})<{13.1.1.1.1.12.4}))
Damit sind nun alle westeuropäischen Sonderbuchstaben erfasst. Die 6 Gruppen sind genauso wie vorher die 2 Gruppen für groß und klein mittels KLEIN() halbiert, und die jeweilige Normierung um Null erlaubt eine weitere Halbierung der Intervall-Bedingungen auf eine einzige.
Ein Hinweis zum ß: Da das ÿ ihm an der Stelle gegenübersteht, wo sonst der Kleinbuchstabe stünde, muss sein Code 223 separat mit aufgenommen werden. Außerdem verstecken sich noch š œ ž mit den Codes 154, 156 und 158.
Bemerkung: Wir haben Glück, dass wir gerade nur 8 Funktionsverschachtelungen benötigen und das Excel-Limit gerade noch einhalten. Auf KLEIN() kann allerdings verzichtet werden, wenn dafür die Zahlenarrays größer werden dürfen.
Da die Formel schwierig zu lesen ist, hier noch die Klartext-Variante:
=SUMMENPRODUKT(
1-ISTFEHL(SUCHEN(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1);
"abcdefghijklmnopqrstuvwxyzàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿšœžß")))
Sie verwendet (nur) 7 Funktionsverschachtelungen und 2 Klammerungen weniger.
Nebenbei den langen String als "Buchstaben" benennend, erreicht man mittels ANZAHL in folgender Formel 6 Funktionsverschachtelungen:
Matrixformel: {=ANZAHL(SUCHEN(TEIL(A1;ZEILE(INDIREKT("1:"&LÄNGE(A1)));1);Buchstaben))}
Warum? ANZAHL ist gegenüber SUMME fehlertolerant. Damit entfällt die Fehlerbehandlung.