Simulieren String Split-Funktion in Excel-Formel
-
06-07-2019 - |
Frage
Ich versuche, eine Zeichenfolge in einer Excel-Formel zu spalten, so etwas wie ich in vielen Programmiersprachen tun kann, z.
string words = "some text".split(' ');
Das Problem ist, dass ich nicht sicher sein kann, dass es mehr als ein Wort in der Zelle ist. Wenn ich versuche, die FIND()
oder SEARCH()
Funktionen zu nutzen, kehren sie #VALUE
wenn es nicht Raum ist. Gibt es eine einfache Möglichkeit, die Zeichenfolge, so dass es wieder die einzelnen Wörter zu spalten (oder noch besser, so dass es gibt entweder die zuerst Wort oder alle anderen Wörter)?
Lösung
Eine Formel zurückzukehren entweder die erste Wort oder alle anderen Wörter .
=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))
Beispiele und Ergebnisse
Text Description Results
Blank
Space
some Text no space some
some text Text with space text
some Text with leading space some
some Text with trailing space some
some text some text Text with multiple spaces text some text
Kommentare zu Formel:
- Die TRIM Funktion werden alle führenden und nachgestellten Leerzeichen zu entfernen. Duplizieren Abstand innerhalb der Text auch entfernt wird.
- Die FIND Funktion findet dann die erster Raum
- Wenn kein Platz mehr ist dann die getrimmt Text zurückgegeben
- Ansonsten ist die MID Funktion ist zurückzukehren beliebigen Text nach dem verwendeten erster Raum
Andere Tipps
Das folgende Code gibt das erste Wort in der Zelle A1, wenn sie von einem Raum (Arbeiten in Excel 2003) getrennt:
=LEFT(A1, SEARCH(" ",A1,1))
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
Dies wird zunächst prüfen, ob die Zelle ein Leerzeichen enthält, wenn es tut, wird es den ersten Wert aus dem Raum zurückkehren, sonst wird es den Zellwert zurück.
Bearbeiten
Nur die obigen Formel hinzuzufügen, wie es steht, wenn kein Wert in der Zelle ist, würde es 0 zurück Wenn Sie eine Nachricht oder etwas anzuzeigen suchen, um den Benutzer zu sagen, es ist leer Sie folgende verwenden:
=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))
Diese Dinge sind in der Regel einfacher sein, wenn man ihnen eine Zelle zu einem Zeitpunkt, zu schreiben, die langen Formeln bis in kleinere brechen, wo man sich auf dem Weg zu überprüfen. Sie können dann die Zwischenberechnungen verstecken, oder rollen sie in eine einzige Formel auf den Punkt.
Zum Beispiel unter James' Formel:
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)
, die nur gültig in Excel 2007 oder höher ist.
Break it up wie folgt:
B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))
Es ist nur ein wenig leichter zu arbeiten, ein Stück zu einer Zeit. Sobald das erledigt ist, können Sie es drehen in
=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))
, wenn Sie dies wünschen.
Wenn Sie die Zuordnung zu den Spalten müssen nur einmal die Antwort der „Text in Spalten“ Funktionalität in MS Excel ist.
Siehe MS Hilfe-Artikel hier: http://support.microsoft.com/kb/214261
HTH
Sie die Zelle markieren, verwenden Sie Dat => Text in Spalten und das Trennzeichen ist der Raum. Ergebnis wird in so viele Spalten erscheint als die geteilte den Raum finden.
Einige große Arbeitsblatt-fu in den anderen Antworten, aber ich denke, sie übersehen haben, dass Sie eine benutzerdefinierte Funktion definieren können (UDF) und nennen dies aus dem Blatt oder einer Formel.
Das nächste Problem, das Sie haben zu entscheiden, entweder mit einer ganzen Reihe oder mit dem Elemente zu arbeiten.
Zum Beispiel dieses UDF Funktionscode
Public Function UdfSplit(ByVal sText As String, Optional ByVal sDelimiter As String = " ", Optional ByVal lIndex As Long = -1) As Variant
Dim vSplit As Variant
vSplit = VBA.Split(sText, sDelimiter)
If lIndex > -1 Then
UdfSplit = vSplit(lIndex)
Else
UdfSplit = vSplit
End If
End Function
können einzelne Elemente mit der in einer Zelle folgende
=UdfSplit("EUR/USD","/",0)
oder man kann einen Block von Zellen mit
verwenden =UdfSplit("EUR/USD","/")