Excel extrair substring da string


22

Eu estou procurando uma maneira de extrair uma substring de comprimento variável de uma seqüência de caracteres.

Minhas células se parecerão com:

ABC - DEF
ABCDE - DEF
ABCD - ABC

Quero dividir a string no -caractere, para que as células se tornem:

ABC
ABCDE
ABCD

Isso deve ser feito com uma fórmula e não com VBScript.

Estou usando o Excel 2010

EDITAR

Descobri que o conjunto de dados nem sempre contém o -caractere, o que significa que não deve haver alterações.

Respostas:


26

Esse problema pode ser dividido em duas etapas:

  1. Encontre o índice na sequência do seu caractere de divisão desejado (neste caso, "-"ou " - ").
  2. Obtenha a substring do prefixo do início do texto original para o índice dividido.

Os comandos FINDe SEARCHretornariam o índice de um dado needleem a haystack( FINDdiferencia maiúsculas de minúsculas, não SEARCHdiferencia maiúsculas de minúsculas e permite caracteres curinga). Dado isso, temos:

FIND(search_text, source_cell, start_index)

ou neste caso:

FIND(" - ", A1, 1)

Depois de termos o índice, precisamos do prefixo de source_cellpara fazer a "divisão". MIDfaz exatamente isso:

MID(source_cell, start_index, num_characters)

Juntando os dois, temos:

=MID(A1,1,FIND(" - ",A1,1))

com A1 com texto de ABC - DEFdoações ABC.


7

Expandindo a resposta de Andrew com base na sua edição: para encontrar a sequência de caracteres para dividir, estamos usando a FINDfunção Se FINDnão conseguir localizar a sequência fornecida, ele retornará um #VALUE?erro. Portanto, precisaremos verificar esse valor e usar um valor substituto.

Para verificar qualquer valor de erro #VALUE, inclusive , usamos a ISERRORfunção, assim:

=ISERROR(FIND(" - ", A1, 1))

isso será verdadeiro se a FINDfunção não conseguir encontrar a seqüência "-" na célula A1. Então, usamos isso para decidir qual valor usar:

=IF(ISERROR(FIND(" - ", A1, 1)), A1, MID(A1, 1, FIND(" - ", A1, 1)))

Isso indica que, se o comando find retornar um erro, use a célula A1 não modificada. Caso contrário, faça a MIDfunção que Andrew já forneceu.


2

Obrigado @AndrewColeson por sua resposta.

Então, apenas para adicionar a isso, se você quiser tudo no lado direito da -, use este código:

= MID (A1, LEN (B1) + 3, LEN (A1))

Qual é:

A1 = ABC - DEF
B1 = =MID(A1,1,FIND(" - ",A1,1))
    B1 = ABC
Therefore A1 = DEF

Esse código é ótimo para se você tiver um número indefinido de caracteres após o -.

Por exemplo:

Se você tem:

ABC - DEFG
AB - CDEFGH
...

isso faz o truque também =MID(a1,FIND("-",a1)+1,LEN(a1))sem quaisquer referências "extra-celular")
Mikey

1

Aqui está uma maneira muito simples de extrair o quinto caractere da esquerda de uma sequência de texto no Excel:

Suponha que a seqüência de caracteres ABCDEFGHIJseja armazenada na célula A1 em uma planilha do Excel e, em seguida, na seguinte fórmula

=RIGHT(LEFT(A1,5),1)

produz o quinto caractere a partir da esquerda na string, a saber E.


(Será que não há MID? Função no Excel Eu tenho certeza que existe no legado Visual Basic, e seria algo como =MID(A1, 5, 1))
Valmiky Arquissandas

0

A fórmula a seguir removerá uma substring de [TEXTCOLUMN_1]

por exemplo: se você deseja converter -./thumb/hello.jpgpara thumb/hello.jpg, use a seguinte fórmula

=SUBSTITUTE([TEXTCOLUMN_1],LEFT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)

[TEXTCOLUMN_1]= o nome da coluna que você deseja alterar [NUM_OF_CHARACTERS]= número de caracteres do lado esquerdo que você deseja remover

Se você deseja remover do lado direito, use o seguinte

=SUBSTITUTE([TEXTCOLUMN_1],RIGHT([TEXTCOLUMN_1],[NUM_OF_CHARACTERS]),)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.