Beitrag aus SmartTools Excel Weekly
Letztes Wort aus einer Zeichenkette ohne Arrayformel ermitteln
Excel 365 2024 2021 2019 2016 2013
FRAGE Ich bin auf der Suche nach einer speziellen Excel-Formel. In diesem Fall soll sie in einem Kalkulationsmodell das letzte Wort aus einer längeren Zeichenkette (der Text hinter dem letzten Leerzeichen) als Ergebnis liefern. Bei der Suche nach einer Lösung bin ich zwar auf entsprechende Arrayformeln gestoßen, aber die möchte ich nicht einsetzen. Kann ich nicht auch eine normale Formel verwenden?
Diverse Anfragen
ANTWORT Arrayformeln sind in der Tat nicht jedermanns Sache. Und es gibt - wie so oft bei komplexen Problemstellungen - auch in diesem Fall eine Alternative in Form einer "normalen" Formel:
=TEIL(A1;FINDEN("#";WECHSELN(A1;" ";
"#";LÄNGE(A1)-LÄNGE(WECHSELN(A1;" ";))))+1;99)
Die TEIL-Funktion liefert dabei das Wort hinter dem letzten Leerzeichen. Unterschiedlich ist die Vorgehensweise bei der Suche nach der Position dieses Zeichens. In Ihrer Formel verbirgt sich dieser Aufgabenteil in der FINDEN-Funktion.
Die Funktion sucht nach einem #-Zeichen. Es könnte aber auch ein beliebiges anderes Zeichen sein. Wichtig ist nur, dass dieses Zeichen in der Originalzeichenkette nicht vorkommt. Wenn Sie also das letzte Wort in Zeichenketten suchen, die potenziell #-Zeichen enthalten könnten, ersetzen Sie jedes #-Zeichen in der Formel durch ein anderes Zeichen, das in den zu untersuchenden Zeichenketten garantiert nicht vorkommt. Die Formel könnte somit auch wie folgt aussehen:
=TEIL(A1;FINDEN("~";WECHSELN(A1;" ";"~";
LÄNGE(A1)-LÄNGE(WECHSELN(A1;" ";))))+1;99)
Die Formel sucht jetzt aber nicht in der Originalzeichenkette nach dem speziellen Zeichen, sondern in einer per WECHSELN-Funktion überarbeiteten Variante. Die erste WECHSELN-Funktion nutzt auch das vierte, optionale Funktionsargument, mit dem Sie konkret das "n-te Auftreten" eines Zeichens gegen ein anderes Zeichen austauschen. In diesem Fall dient das dazu, nur das letzte Leerzeichen der Originalzeichenkette gegen das #-Zeichen (bzw. in der oben vorgestellten Formelalternative: gegen das ~-Zeichen) auszutauschen.
Und wie finden Sie das letzte Leerzeichen? Sie vergleichen die Länge der Originalzeichenkette mit der Länge dieser Zeichenkette ohne Leerzeichen. Zum Löschen aller Leerzeichen verwenden Sie wieder eine WECHSELN-Funktion, die einfach alle Leerzeichen durch nichts ersetzt. Die Differenz der Zeichenkettenlängen gibt Auskunft darüber, wie viele Leerzeichen die Originalzeichenkette enthält. Damit kennen Sie auch das "n-te Auftreten" eines Leerzeichens.
Wenn Sie exakt dieses Leerzeichen gegen das #-Zeichen (bzw. das ~-Zeichen) austauschen, liefert die FINDEN-Funktion die passende Position für die umgebende TEIL-Funktion.
In der vorgestellten Variante gibt die Formel das letzte Wort bis zu einer maximalen Länge von 99 Zeichen aus. Sollte diese Länge nicht ausreichen, müssen Sie nur das letzte Argument der TEIL-Funktion ändern - beispielsweise in "200". Die Formel sähe dann so aus:
=TEIL(A1;FINDEN("#";WECHSELN(A1;" ";"#";
LÄNGE(A1)-LÄNGE(WECHSELN(A1;" ";))))+1;200)
... oder in der oben vorgestellten Alternativform:
=TEIL(A1;FINDEN("~";WECHSELN(A1;" ";"~";
LÄNGE(A1)-LÄNGE(WECHSELN(A1;" ";))))+1;200)
Die Formel liefert allerdings den Fehler "#WERT!" wenn die Originalzeichenfolge gar keine Leerzeichen enthält. Sie könnten das abfangen, indem Sie die Formel um eine WENN-Funktion erweitern, die prüft, ob die zu untersuchende Zeichenkette überhaupt Leerzeichen enthält. Die erweiterte Formel sähe dann so aus:
=WENN(ISTZAHL(FINDEN(" ";A1));TEIL(A1;FINDEN(
"#";WECHSELN(A1;" ";"#";LÄNGE(A1)-LÄNGE(
WECHSELN(A1;" ";))))+1;200);A1)