Google Sheets-Kochbuch: Zellinhalt auf mehrere Spalten aufteilen (SPLIT)
Hier wird es darum gehen, wie man den Inhalt einer Zelle auf mehrere andere Zellen - in der Regel in Spalten - aufteilen kann. Dazu werden wir verschiedene Funktionen verwenden, insbesondere die SPLIT-Funktion, aber auch andere Methoden (vor allem reguläre Ausdrücke) kennenlernen.
Im ersten Beispiel soll der Inhalt von Spalte A auf die Spalten B und C aufgeteilt werden.
A | B | C |
---|---|---|
García Sánchez, Inès | =SPLIT(A1;",") |
|
MacCòmhain, Janessa-Melody | MacCòmhain | Janessa-Melody |
MacGavin, Aybüke | MacGavin | Aybüke |
=SPLIT(A1;",")
- Der String wird am Komma auf zwei Spalten aufgeteilt.
- Allerdings enthält der zweite Teilstring (der Vorname) noch ein Leerzeichen.
=SPLIT(A1;", ")
- Diese Variante teilt am Komma und am Leerzeichen auf, das hat den hier unerwünschten Effekt, dass der Name "García Sánchez, Inès" auf drei Spalten aufgeteilt wird.
=SPLIT(A1;", ";FALSE)
- Die Funktion SPLIT hat noch zwei weitere Parameter. Der dritte Parameter unterscheidet, ob an jedem Trennzeichen aufgeteilt werden soll (voreingestellt TRUE), oder ob die gesamte Zeichenkette als Trennzeichen verwendet werden soll.
- Diese Variante teilt am kombinierten Zeichen aus Komma und Leerzeichen auf.
=IFERROR(SPLIT(A1;", ";FALSE))
- Mit IFERROR werden VALUE-Fehler abgefangen, wenn die Spalte A leer ist.
Sie können natürlich auch an anderen Zeichen aufteilen:
=SPLIT(A1;CHAR(10))
- CHAR(10) ist der Zeilenumbruch. Hier wird eine Zelle entlang der Zeilenumbrüche aufgeteilt.
=SPLIT(A10;CHAR(10);TRUE;FALSE)
- Der vierte Parameter von Split entscheidet darüber, ob leere Zellen ignoriert werden sollen (TRUE - default) oder nicht (FALSE).
A | B | C | D |
---|---|---|---|
Peter Heinz
| Peter Heinz | Sylvia Pech |
Eine ganze Spalte auf einmal aufteilen können Sie mit einer ARRAYFORMULA.
=ARRAYFORMULA(IFERROR(SPLIT(A:A;", ";FALSE)))
- Hier wird wieder am Komma gesplittet, der Eingabebereich ist die Spalte A.
Splitten mit Auswahl
[Bearbeiten]SPLIT liefert uns ein Zeilenarray zurück. Das können wir verwenden, um nur auf einzelne Ergebnisse des SPLITs zurückzugreifen.
=INDEX(SPLIT(A1;", ";FALSE);1)
- Das liefert uns nur das erste Ergebnis von SPLIT zurück.
- Man könnte für genau diese Lösung sonst auch eine Kombination von FIND und LEFT verwenden.
=LEFT(A1;FIND(", ";A1)-1)
- Die SPLIT-Lösung finde ich eleganter, da sie universeller ist. Ich kann nicht nur LEFT, RIGHT und MID verwenden, sondern jeden beliebigen Teil des Strings ausgeben lassen (über die Auswahl des Index). Außerdem ist die LEFT-Lösung umständlicher, da man den Text (hier A1) zweimal eintragen muss.
Splitten mit Aufteilung in Spalten und Zeilen
[Bearbeiten]Nehmen wir an, wir haben Wertepaare, die jeweils durch ein Komma und Leerzeichen getrennt sind, und wollen diese Paare jeweils in Zeile und Spalte getrennt bekommen. Voraussetzung ist natürlich, dass die Paare wirklich paarweise vorliegen.
A | B | C |
---|---|---|
a, b, c, d, e, f | a | b |
c | d | |
e | f |
=INDEX(VLOOKUP("KEY";{"KEY"\SPLIT(A1;", ";FALSE;FALSE)};SEQUENCE(COLUMNS(SPLIT(A1;", ";FALSE;FALSE))/2;2;2;1);0))
- Im ersten Schritt splitten wir die Zelle am Trennzeichen ", " auf (das linke SPLIT).
- Das entstehende Zeilenarray ergänzen wir um einen "KEY" in der ersten Zelle, das Array ist jetzt also eine Zelle länger (KEY|a|b|c|d|e|f).
- Der VLOOKUP sucht dann banalerweise nach dem "KEY", die Ausgabe wird durch das Array bestimmt, dass wir mit SEQUENCE erzeugen.
- SEQUENCE erzeugt ein ARRAY. Die Syntax ist:
SEQUENCE(Zeilen; Spalten; Beginn; Schritt)
- Um die Zeilenanzahl herauszubekommen, ermitteln wir die Länge des ursprünglichen Zeilenarrays und teilen die Länge durch 2 (
COLUMNS(SPLIT(A1;", ";FALSE;FALSE))/2
). - Das Ergebnis soll in zwei Spalten aufgeteilt werden (2).
- Unser Suchbereich hat den "KEY" in der ersten Zelle, deswegen beginnen wir mit der zweiten Zelle (2).
- Danach wollen wir jede Zelle (1) zurückbekommen.
- Um die Zeilenanzahl herauszubekommen, ermitteln wir die Länge des ursprünglichen Zeilenarrays und teilen die Länge durch 2 (
- Damit alle Zellen ausgegeben werden, verwenden wir INDEX ohne Beschränkung des Arrays.
Genauso können wir in drei Spalten aufteilen, es ändert sich "nur" die SEQUENCE.
=INDEX(VLOOKUP("KEY";{"KEY"\SPLIT(A1;", ";FALSE;FALSE)};SEQUENCE(COLUMNS(SPLIT(A1;", ";FALSE;FALSE))/3;3;2;1);0))
Splitten bei komplizierteren Mustern
[Bearbeiten]SPLIT hat eine Menge Vorteile. Es ist unkompliziert und funktioniert auch, wenn sehr viele Teilstrings vorliegen. Wenn die Muster allerdings komplizierter werden, hilft uns SPLIT nicht weiter.
REGEXEXTRACT kann auch den Eingabestring in Zellen aufteilen, ist dafür nicht so universell (maximal 9 Gruppen).
Eingabestring: "1234,56+123" => Gewünschte Ausgabe: "1234,56 | +123"
=REGEXEXTRACT(A1;"([\d,]+)(\+\d+)")
- Das Trennzeichen ist hier das "+", das Trennzeichen soll im Ausgabestring vorkommen.
- Wir verwenden zwei Gruppen, die erste Gruppe (gezählt wird ab der öffnenden Klammer) enthält die Zahl vor dem +, die zweite Gruppe das Plus-Zeichen und die Zahl dahinter (in der kein Komma vorkommen darf).
Variierende Split-Zeichen
Beispiel:
- Eingabestring: "UGCPQ2 => Gewünschte Ausgabe UGCP | Q2"
- Eingabestring: "ABDFD2 => Gewünschte Ausgabe ABDFD | 2"
Hier soll der Eingabestring also dann an der Zahl gesplittet werden, wenn kein Q davor steht, gibt es aber ein Q, dann soll das Q mit in die Ausgabe.
=REGEXEXTRACT(A1;"([^\d]+?)(Q?\d+)")
- Wir suchen nach allen Zeichen, die keine Zahl sind (^\d), davon muss es eins oder mehrere geben (+).
- Der Ausdruck soll aber nicht gierig sein (?), wenn im zweiten Ausdruck ein Q gefolgt von einer Zahl vorkommt, "gewinnt" der zweite Ausdruck.
- Die zweite Gruppe enthält dann 0 oder 1 Q, gefolgt von einer oder mehrere Zahlen.
Die Beispiele auf dieser Seite wurden getestet: 03/2022