2009-06-23 8 views
26

Sto cercando di dividere una stringa in una formula di Excel, qualcosa come posso fare in molti linguaggi di programmazione, ad esempio,Simula funzione di stringa divisa in Excel formula

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

Il problema è che non posso essere sicuro che ci sia più di una parola nella cella. Se provo ad utilizzare i FIND() o SEARCH() funzioni, ritornano #VALUE se non c'è spazio. C'è un modo semplice per dividere la stringa in modo che restituisca le singole parole (o meglio ancora, in modo che restituisce la parola prima o tutti gli altri parole)?

+1

In che modo vuoi che le parole vengano restituite? Excel non può memorizzare una matrice in una singola cella. Quindi cosa dovrebbe essere? – Tomalak

risposta

23

Una formula per restituire sia la prima parola o tutte le altre parole.

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

Esempi e risultati

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 

Commenti sulla Formula:

  • La funzione TRIM viene utilizzato per rimuovere tutti gli spazi iniziali e finali. Anche la spaziatura duplicata all'interno del testo viene rimossa.
  • La funzione TROVA poi trova il primo spazio
  • Se non c'è spazio poi il rifilato testo viene restituito
  • In caso contrario, la funzione MID è utilizzata per restituire qualsiasi testo dopo il primo spazio
+0

Grazie, è proprio quello che cercavo –

+2

Perché oh perché non aggiungono alcune funzioni di analisi delle stringhe decenti in Excel!?!? – Rory

+0

@Rory perché Excel è realizzato principalmente per i revisori dei conti e non esiste un modo elegante per ignorare il presupposto che un contabile stia guidando l'applicazione. Deve esserci un Excel per i programmatori. – dreftymac

9

I seguenti ritorna la prima parola nella cella A1, quando separati da uno spazio (lavora in Excel 2003):

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

Sì, ma se non c'è spazio nella cella, verrà restituito un errore! –

+3

= SINISTRA (A1, CERCA ("", CONCATENA (A1, ""), 1)) – flash

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

Ciò in primo luogo verificare se la cella contiene uno spazio, se lo fa restituirà il primo valore dallo spazio, altrimenti restituirà il valore della cella.

Modifica

solo per aggiungere alla formula di cui sopra, così com'è, se non v'è alcun valore nella cella che sarebbe tornato 0. Se siete alla ricerca per visualizzare un messaggio o qualcosa da dire all'utente che è vuoto è possibile utilizzare il seguente:

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

Ovviamente è possibile modificare A3 a cui mai cella è il tuo tentativo di valutare, James. – James

+0

Non ho fatto esattamente quello che cercavo, ma +1 perché era utile altrove –

3

Queste cose tendono ad essere più semplici se si scrive una cella alla volta, suddividendo le lunghe formule in quelle più piccole, dove è possibile controllarle lungo t lui modo. È quindi possibile nascondere i calcoli intermedi o arrotolarli tutti in un'unica formula.

Per esempio, prendendo formula James':

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

che è valido solo in Excel 2007 o successivo.

disgregare come segue:

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

E 'solo un po' più facile da lavorare, un pezzo alla volta. Una volta fatto, è possibile trasformarlo in

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

se lo desiderano.

1

evidenziare la cella, utilizzare Dat => Testo in colonne e il delimitatore è lo spazio. Il risultato apparirà in tutte le colonne in cui lo split trova lo spazio.

0

Bellissimo foglio-fu nelle altre risposte, ma penso che abbiano trascurato che si può definire una funzione definita dall'utente (UDF) e chiamare questo dal foglio o di una formula.

Il problema successivo è decidere se lavorare con un intero array o con un elemento.

Per esempio, questo codice funzione UDF

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 

permette singoli elementi con la seguente in una cella

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

oppure si può utilizzare un blocchi di celle con

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