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)?

War es hilfreich?

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","/")

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top