2009-06-23 14 views
26

Próbuję podzielić ciąg znaków w formule excel, tak jak mogę to zrobić w wielu językach programowania, np.Symulacja dzielenia ciągu znaków w formule Excela

string words = "some text".split(' '); 

Problem polega na tym, że nie mogę być pewien, że w komórce znajduje się więcej niż jedno słowo. Jeśli spróbuję użyć funkcji FIND() lub SEARCH(), zwrócą one #VALUE, jeśli nie ma spacji. Czy istnieje jakiś prosty sposób na podzielenie ciągu tak, aby zwracał pojedyncze słowa (lub jeszcze lepiej, tak aby zwracał albo pierwsze słowo albo wszystkie inne słowa)?

+1

W jaki sposób? chcesz, aby słowa zostały zwrócone? Program Excel nie może przechowywać tablicy w pojedynczej komórce. Więc co to powinno być? – Tomalak

Odpowiedz

23

formuła wrócić albo pierwsze słowo lub wszystkie inne słowa.

=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2))) 

przykłady i wyniki

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 

Komentarze o wzorze:

  • TRIM funkcja jest wykorzystywana, aby usunąć wszystkie miejsca początkowe i końcowe. Duplikaty odstępów w tekście są również usuwane. następnie
  • ZNAJDŹ funkcja znajdzie the pierwsza przestrzeń
  • Jeśli nie ma miejsca wówczas przycięte tekst jest zwracana
  • Inaczej MID funkcja jest używany do powrotu dowolny tekst po pierwszego miejsca
+0

Dziękuję, po prostu to było po: –

+2

Dlaczego, och, czemu nie dodadzą porządnych funkcji parsowania napisów do Excela!?!? – Rory

+0

@Rory, ponieważ program Excel jest przeznaczony głównie dla księgowych i nie ma eleganckiego sposobu na zastąpienie założenia, że ​​księgowy jedzie w aplikacji. Musi być program Excel dla programistów. – dreftymac

9

Poniższe zwroty pierwsze słowo w komórce A1, gdy oddzielone spacją (prace w 2003 Excel):

=LEFT(A1, SEARCH(" ",A1,1)) 
+1

Tak, ale jeśli w komórce nie ma spacji, po prostu zwróci błąd! –

+3

= LEWO (A1, WYSZUKIWANIE ("", KONCENTENCJĘ (A1, ""), 1)) – flash

9
=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3) 

To po pierwsze sprawdzić, czy komórka zawiera spację, jeśli to robi zwróci pierwszą wartość z przestrzeni, w przeciwnym razie zwróci wartość komórki.

Edit

Wystarczy dodać do powyższego wzoru, w chwili obecnej, jeśli nie ma wartości w komórce byłoby powrócić 0. Jeśli szukasz, aby wyświetlić wiadomość lub coś powiedzieć to użytkownikowi jest pusty można użyć następujących:

=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)) 
+0

Oczywiście możesz zmienić A3, do której kiedykolwiek próbujesz ocenić komórkę, James. – James

+0

Nie całkiem zrobiłem to, co robiłem, ale +1, ponieważ było to pomocne gdzie indziej. –

3

Te rzeczy wydają się być prostsze, jeśli pisze się je komórkami na raz, przerywając długie formuły na mniejsze, gdzie można je sprawdzić on sposób. Następnie możesz ukryć obliczenia pośrednie lub przetasować je wszystkie w jedną formułę.

Na przykład, biorąc wzór Jamesa:

=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3) 

który jest ważny tylko w programie Excel 2007 lub nowszej.

złamać go w następujący sposób:

B3: =FIND(" ", A3) 
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1)) 

to tylko trochę łatwiej pracować, kawałek na raz. Gdy to zrobisz, możesz go zamienić na , jeśli sobie tego życzysz.

1

Zaznacz komórki, użyj Dat => Tekst jako kolumny i separator jest przestrzeń. Wynik pojawi się w tylu kolumnach, co split, aby znaleźć spację.

0

Kilka świetnych arkuszy roboczych w innych odpowiedziach, ale myślę, że przeoczyli, że można zdefiniować funkcję zdefiniowaną przez użytkownika (udf) i wywołać to z arkusza lub formuły.

Następnym problemem, jaki masz, jest podjęcie decyzji o pracy z całą tablicą lub elementem.

Przykładowo ten UDF kod funkcji

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 

umożliwia pojedyncze elementy z następujących w jednej komórce

=UdfSplit("EUR/USD","/",0)

lub można użyć bloków komórek z

=UdfSplit("EUR/USD","/")