Domanda

Ho un foglio di calcolo Excel che contiene un elenco di stringhe. Ogni stringa è composta da più parole, ma il numero di parole in ciascuna stringa è diverso.

Utilizzando le funzioni di Excel integrate (senza VBA), c'è un modo per isolare l'ultima parola in ogni stringa?

Esempi:

  Are you classified as human? -> human?
Negative, I am a meat popsicle -> popsicle
                  Aziz! Light! -> Light!
È stato utile?

Soluzione

Questo è testato e funziona (basato sul post originale di Brad):

=RIGHT(A1,LEN(A1)-FIND("|",SUBSTITUTE(A1," ","|",
     LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))

Se le tue stringhe originali potrebbero contenere una pipe " | " carattere, quindi sostituisci entrambi i precedenti con qualche altro personaggio che non verrà visualizzato nella tua fonte. (Sospetto che l'originale di Brad sia stato rotto perché nella traduzione è stato rimosso un personaggio non stampabile).

Bonus: come funziona (da destra a sinistra):

LEN(A1)-LEN(SUBSTITUTE(A1," ","")) & # 8211; Conteggio degli spazi nella stringa originale
SUBSTITUTE(A1," ","|", ... ) & # 8211; Sostituisce solo lo spazio finale con un |
FIND("|", ... ) & # 8211; Trova la posizione assoluta di quella sostituita Right(A1,LEN(A1) - ... )) (quello era lo spazio finale)
=IF(COUNTIF(A1,"* *") & # 8211; Restituisce tutti i caratteri dopo quello <=>

MODIFICA: per tenere conto del caso in cui il testo di origine non contiene spazi, aggiungi quanto segue all'inizio della formula:

=IF(ISERROR(FIND(" ",A1)),A1, ... )

rendendo l'intera formula ora:

=IF(ISERROR(FIND(" ",A1)),A1, RIGHT(A1,LEN(A1) - FIND("|",
    SUBSTITUTE(A1," ","|",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))))

Oppure puoi utilizzare la <=> sintassi dell'altra versione.

Quando la stringa originale potrebbe contenere uno spazio nell'ultima posizione, aggiungere una funzione di taglio mentre si contano tutti gli spazi: Rendere la funzione la seguente:

=IF(ISERROR(FIND(" ",B2)),B2, RIGHT(B2,LEN(B2) - FIND("|",
    SUBSTITUTE(B2," ","|",LEN(TRIM(B2))-LEN(SUBSTITUTE(B2," ",""))))))

Altri suggerimenti

Questa è la tecnica che ho usato con grande successo:

=TRIM(RIGHT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

Per ottenere la prima parola in una stringa, passa da DESTRA a SINISTRA

=TRIM(LEFT(SUBSTITUTE(A1, " ", REPT(" ", 100)), 100))

Inoltre, sostituisci A1 con la cella che contiene il testo.

Una versione più solida della risposta di Jerry:

=TRIM(RIGHT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(TRIM(A1))))

Funziona a prescindere dalla lunghezza della stringa, dagli spazi iniziali o finali o da qualsiasi altra cosa ed è ancora piuttosto breve e semplice.

Ho trovato questo su google, testato in Excel 2003 & amp; funziona per me:

=IF(COUNTIF(A1,"* *"),RIGHT(A1,LEN(A1)-LOOKUP(LEN(A1),FIND(" ",A1,ROW(INDEX($A:$A,1,1):INDEX($A:$A,LEN(A1),1))))),A1)

[modifica] Non ho abbastanza rappresentante per commentare, quindi questo sembra il posto migliore ... Anche la risposta di BradC non funziona con spazi finali o celle vuote ...
[2a modifica] in realtà, non funziona nemmeno per singole parole ...

=RIGHT(TRIM(A1),LEN(TRIM(A1))-FIND(CHAR(7),SUBSTITUTE(" "&TRIM(A1)," ",CHAR(7),
LEN(TRIM(A1))-LEN(SUBSTITUTE(" "&TRIM(A1)," ",""))+1))+1)

Questo è molto robusto - funziona per frasi senza spazi, spazi iniziali / finali, spazi multipli, spazi multipli iniziali / finali ... e ho usato char (7) per il delimitatore anziché la barra verticale quot; | <> quot; nel caso in cui si tratti di un elemento di testo desiderato.

Questo è molto pulito e compatto e funziona bene.

{=RIGHT(A1,LEN(A1)-MAX(IF(MID(A1,ROW(1:999),1)=" ",ROW(1:999),0)))}

Non intercetta errori per nessuno spazio o una parola, ma è facile da aggiungere.

Modifica
Gestisce gli spazi finali, le parole singole e gli scenari di celle vuote. Non ho trovato il modo di romperlo.

{=RIGHT(TRIM(A1),LEN(TRIM(A1))-MAX(IF(MID(TRIM(A1),ROW($1:$999),1)=" ",ROW($1:$999),0)))}
=RIGHT(A1,LEN(A1)-FIND("`*`",SUBSTITUTE(A1," ","`*`",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))) 

Per aggiungere alle risposte di Jerry e Joe, se vuoi trovare il testo PRIMA dell'ultima parola che puoi usare:

=TRIM(LEFT(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))), LEN(SUBSTITUTE(TRIM(A1), " ", REPT(" ", LEN(TRIM(A1)))))-LEN(TRIM(A1))))

Con "Il mio piccolo gatto" in A1 si tradurrebbe in "Il mio piccolo" (dove Joe e Jerry's darebbero "gatto"

Allo stesso modo in cui Jerry e Joe isolano l'ultima parola, questa quindi riporta tutto alla sinistra (quindi la ritaglia indietro)

Immagina che la stringa possa essere invertita. Quindi è davvero facile. Invece di lavorare sulla stringa:

"My little cat" (1)

lavori con

"tac elttil yM" (2)

Con =LEFT(A1;FIND(" ";A1)-1) in A2 ottieni "My" con (1) e "tac" con (2), che è invertito "cat", l'ultima parola in (1).

Ci sono alcuni VBA in giro per invertire una stringa. Preferisco la funzione VBA pubblica ReverseString .

Installa quanto sopra come descritto. Quindi con la stringa in A1, ad es. "My little cat" e questa funzione in A2:

=ReverseString(LEFT(ReverseString(A1);IF(ISERROR(FIND(" ";A1));
  LEN(A1);(FIND(" ";ReverseString(A1))-1))))

vedrai IF in A2.

Il metodo sopra presuppone che le parole siano separate da spazi. La clausola TRIM è per le celle che contengono singole parole = nessun vuoto nella cella. Nota: CLEAN e "tac " anche la stringa originale sono utili. In linea di principio inverte l'intera stringa di A1 e trova semplicemente il primo spazio vuoto nella stringa invertita che si trova accanto all'ultima parola (invertita) (cioè LEFT). " cat" seleziona questa parola e un'altra inversione di stringa ricostituisce l'ordine originale della parola (-1). La FIND alla fine dell'istruzione RIGHT rimuove lo spazio vuoto.

L'idea è che è facile estrarre la prima (!) parola in una stringa con <=> e <=> inserendo il primo spazio vuoto. Tuttavia, per l'ultima parola (!) La funzione <=> è la scelta sbagliata quando si tenta di farlo perché purtroppo FIND non ha un flag per la direzione in cui si desidera analizzare la stringa.

Pertanto l'intera stringa viene semplicemente invertita. <=> e <=> funzionano normalmente ma la stringa estratta è invertita. Ma il suo non è un grosso problema una volta che sai come invertire una stringa. La prima <=> istruzione nella formula fa questo lavoro.

=LEFT(A1,FIND(IF(
 ISERROR(
  FIND("_",A1)
 ),A1,RIGHT(A1,
  LEN(A1)-FIND("~",
   SUBSTITUTE(A1,"_","~",
    LEN(A1)-LEN(SUBSTITUTE(A1,"_",""))
   )
  )
 )
),A1,1)-2)

Copia in una colonna, seleziona quella colonna e HOME > Modifica & Gt; Trova & Amp; Seleziona, Sostituisci:

 Trova cosa:

Sostituisci tutto .

C'è uno spazio dopo l'asterisco.

Ho tradotto in PT-BR, poiché ne avevo bisogno anche io.

(Nota che ho cambiato lo spazio in \ perché avevo bisogno solo del nome file delle stringhe di percorso.)

=SE(ÉERRO(PROCURAR("\",A1)),A1,DIREITA(A1,NÚM.CARACT(A1)-PROCURAR("|", SUBSTITUIR(A1,"\","|",NÚM.CARACT(A1)-NÚM.CARACT(SUBSTITUIR(A1,"\",""))))))

Un altro modo per raggiungere questo obiettivo è il seguente

=IF(ISERROR(TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14))))),TRIM(D14),TRIM(MID(TRIM(D14),SEARCH("|",SUBSTITUTE(TRIM(D14)," ","|",LEN(TRIM(D14))-LEN(SUBSTITUTE(TRIM(D14)," ","")))),LEN(TRIM(D14)))))

 inserisci qui la descrizione dell'immagine

Avevo anche un compito come questo e quando ho finito, usando il metodo sopra, mi è venuto in mente un nuovo metodo: Perché non lo fai:

  1. Inverti la stringa (" stringa una " diventa " eno gnirts ").
  2. Usa il buon vecchio Find (che è hardcoded per sinistra-destra).
  3. Invertire di nuovo in stringa leggibile.

Come suona?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top