Devo trovare l'ultimo spazio in una cella XLS


17

Ho un foglio Excel con valori di testo, ad es. In A1: "Questo è il testo". Devo trovare la posizione dell'ultimo personaggio spaziale. Esiste una formula eccellente che mi darà il risultato che desidero? Ho provato TROVA e RICERCA, tuttavia questi iniziano da sinistra, ciò di cui ho bisogno è iniziare da destra.


Duplicato su più siti della stessa annata: stackoverflow.com/q/18617349
Mathieu K.

Risposte:


28

Se per valore vuoto intendi "spazio" e per XLS intendi Excel, puoi utilizzare questa formula (supponendo che il test in cui vuoi trovare l'ultimo spazio sia A1):

=FIND("☃",SUBSTITUTE(A1," ","☃",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

Puoi dividerlo in 3 parti:

  • LEN(A1)-LEN(SUBSTITUTE(A1," ",""))ti dà il numero di spazi, chiamiamolo x,
  • SUBSTITUTE(A1," ","☃",[x])sostituirà il xth spazio (quindi l'ultimo) con un pupazzo di neve,
  • FIND("☃",[...])ti darà la posizione del pupazzo di neve. Qual è la posizione dell'ultimo spazio.

Funziona perfettamente Grazie. Mi ci è voluto un po 'per capire perché ha funzionato nonostante la tua spiegazione :)
Dheer,

5
+1 per una risposta piacevole e dettagliata e il personaggio sostitutivo più creativo di sempre.
Doug Glancy,

Funziona anche con LibreOffice Calc e Fogli Google.
Mathieu K.

8

Ecco un altro modo, tutti i personaggi sono ammessi in A1 (anche i pupazzi di neve!)

=LOOKUP(2^15,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))))

FIND ha un terzo argomento che definisce la posizione iniziale della ricerca, se si applica una matrice di valori interi da 1 a n (dove n è la lunghezza di A1) a quel parametro si ottiene una matrice indietro con l'ultimo numero che è la posizione della ultimo spazio.

LOOKUPquindi estrae quel numero cercando un valore maggiore di qualsiasi valore che potrebbe essere trovato in quell'array, nel qual caso viene trovato l' ultimo numero

In Excel 2010o dopo potresti anche usare una AGGREGATEfunzione come questa

=AGGREGATE(14,6,FIND(" ",A1,ROW(INDIRECT("1:"&LEN(A1)))),1)

FINDrestituisce lo stesso array di prima e usando 14 come 1 ° argomento di AGGREGATEe 1 come ultimo si ottiene il valore più grande nell'array, ignorando gli errori [6]


1
funziona alla grande. Anche se sono stato uno sviluppatore [molto] tempo fa, non riesco ancora a capire come e perché INDIRECT
funzioni

1
Supponendo che A1 abbia 12 caratteri, questa parte "1:"&LEN(A1)restituisce "1:12" - questa è una stringa che ROW non può elaborare ma INDIRECT converte una stringa in un riferimento valido che ROW può gestire così ROW (1:12) quindi ti dà {1 ; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12}
Barry Houdini,

Grazie per il chiarimento. Ha un senso adesso. Il che significa che si trova implicitamente a lavorare con l'array e viene eseguito per ogni valore come posizione iniziale ...
Dheer,

Esatto, FIND restituisce un array, ad es. Se A1 contiene barry larry houdiniallora FIND restituirà questo array {6;6;6;6;6;6;12;12;12;12;12;12;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}e LOOKUP e / o AGGREGATE prenderanno l'ultimo / massimo valore numerico da quello, cioè 12
Barry Houdini,

Nota: funziona con LibreOffice Calc. Non funziona in Fogli Google, ma trova la prima occorrenza.
Mathieu K.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.