Preciso encontrar o último espaço em uma célula XLS

17

Eu tenho uma planilha do Excel com valores de texto, por exemplo, em A1: "Este é o texto". Preciso encontrar a posição do último caractere de espaço. Existe uma fórmula do Excel que me dará o resultado que eu quero? Eu tentei encontrar e pesquisar, no entanto, estes começam a partir da esquerda, o que eu preciso é começar a partir da direita.

Dheer
fonte
Duplicação entre sites aproximadamente do mesmo vintage: stackoverflow.com/q/18617349
Mathieu K.

Respostas:

28

Se por valor em branco você quer dizer "espaço" e por XLS você quer dizer Excel, você pode usar esta fórmula (assumindo que o teste em que você deseja encontrar o último espaço esteja A1):

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

Você pode dividi-lo em 3 partes:

  • LEN(A1)-LEN(SUBSTITUTE(A1," ",""))fornece o número de espaços, vamos chamá-lo x,
  • SUBSTITUTE(A1," ","☃",[x])substituirá o xespaço th (então o último) por um boneco de neve,
  • FIND("☃",[...])lhe dará a posição do boneco de neve. Qual é a posição do último espaço.
m4573r
fonte
Funciona perfeito. Obrigado. Levei um tempo para descobrir por que ele trabalhou apesar de sua explicação :)
Dheer
5
+1 para obter uma resposta detalhada e agradável e o personagem de substituição mais criativo até o momento.
Doug Glancy
Também funciona no LibreOffice Calc e no Google Sheets.
Mathieu K.
8

Aqui está outra maneira: qualquer personagem é permitido na A1 (até bonecos de neve!)

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

FIND possui um terceiro argumento que define a posição inicial da pesquisa, se você aplicar uma matriz de valores inteiros 1 a n (onde n é o comprimento de A1) a esse parâmetro, você recupera uma matriz com o último número sendo a posição da último espaço.

LOOKUPextrai esse número pesquisando um valor maior que qualquer valor que possa ser encontrado nessa matriz; nesse caso, o último número é encontrado

Em Excel 2010ou mais tarde, você também pode usar AGGREGATEfunções como esta

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

FINDretorna a mesma matriz de antes e usando 14 como primeiro argumento de AGGREGATEe 1 como o último, você obtém o maior valor da matriz, ignorando erros [6]

barry houdini
fonte
1
funciona bem. Embora eu era colaborador alguns [longa] tempo atrás eu ainda não consigo descobrir como e porque funciona INDIRETO :)
Dheer
1
Assumindo que A1 tenha 12 caracteres, esta parte é "1:"&LEN(A1)avaliada como "1:12" - essa é uma sequência que ROW não pode processar, mas INDIRECT converte uma sequência em uma referência válida que ROW pode manipular, então ROW (1:12) fornece {1 ; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12}
barry houdini
Obrigado por esclarecer. Faz algum sentido agora. Que meios encontrar-se implicitamente trabalha com a matriz e é executado para cada valor como posição de partida ...
Dheer
É isso mesmo, FIND retorna um array, por exemplo, se A1 contém barry larry houdiniem seguida, encontrar retornará essa matriz {6;6;6;6;6;6;12;12;12;12;12;12;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}e PROC e / ou agregado vai tomar o último maior valor / numérico disso, ou seja, 12
Barry houdini
Nota: isso funciona no LibreOffice Calc. Ele não funciona no Planilhas Google, encontrando a primeira ocorrência.
Mathieu K.