Notação do Excel que dá ao FIND a capacidade de procurar várias cadeias

2

Estou trabalhando com uma planilha com uma lista de nomes de escolas. Eu puxo dados desta planilha para criar uma lista que limita o tamanho do texto em cada célula. Para obter os nomes das escolas, tenho que remover o tipo de escola do nome.

Exemplo: nome original = > Nome processado

  • Elementar genérico = > Genérico
  • Escola secundária sem nome = > Sem nome
  • Across Town High School = > Através da cidade

Eu não posso procurar o primeiro espaço já que alguns dos nomes das escolas têm duas palavras. Consegui fazer isso funcionar com uma instrução IF altamente aninhada.

=IFERROR(LEFT(J2,FIND("Elementary",J2)-2),IFERROR(LEFT(J2,FIND("Middle",J2)-2),IFERROR(LEFT(J2,FIND("High",J2)-2),J2)))

O problema que tenho com essa solução é que ela é realmente longa. O que eu gostaria é uma maneira de ter a função FIND procurar por mais de uma string de texto. Eu sinto que isso reduziria essa fórmula a algo muito mais fácil de ler.

Alguém tem alguma ideia? Existe uma maneira mais elegante de fazer isso?

Obrigado antecipadamente

    
por Doltknuckle 01.06.2011 / 18:01

3 respostas

1

Datatoo me derrotou (+1).
Se você quer uma alternativa que não envolva fórmulas, você sempre pode usar o Localizar e substituir do Excel -

  1. Ctrl + H
  2. Digite " ensino médio " (com um espaço antes da palavra) na caixa Localizar o que
  3. Deixar Substituir por em branco.
  4. Substituir tudo
  5. Repita para cada palavra / frase que você deseja remover de suas células.

Adendo:
Se você quiser usar uma função personalizada, tente fazer isso:

Option Compare Text
Public Function REPLACETEXT(src As Range, crt As Range) As String
s = Trim(src.Value)
    For Each c In crt
        If InStr(1, s, Trim(c.Value)) Then newstr = Replace(s, Trim(c.Value), "")
    Next c
REPLACETEXT = newstr
End Function

Pressione ALT + F11 . Cole o código em um novo módulo.

Uso:

=REPLACETEXT(A1,D1:D3)

onde A1 contém o texto completo ("Really Cool Middle School") e D1: D3 contém as strings que você deseja remover de suas células (por exemplo "ensino médio "," high school "," elementar ")

    
por 02.06.2011 / 02:02
3

Talvez não seja mais elegante, mas mais curto, e com o mesmo problema que o seu em relação à diferenciação de maiúsculas e minúsculas. Problemas se a sequência final da escola não for consistente, mas talvez eles sejam.

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(J2,"Elementary",""),"Middle School",""),"High School","")

Alguém pode criar uma função mais elegante definida pelo usuário, mas você pode adicionar isso a um módulo na pasta de trabalho.

 Public Function schType(Cell As String) As String
   If InStr(1, LCase(Cell), "elementary school") > 0 Then schType = Replace(Cell, "elementary school", "")
   If InStr(1, LCase(Cell), "high school") > 0 Then schType = Replace(Cell, "high school", "")
   If InStr(1, LCase(Cell), "middle school") > 0 Then schType = Replace(Cell, "middle school", "")
 End Function

Então na célula você quer = schType (J2)
Isso foi rápido e procura por essas strings específicas, em vez de strings parciais em um caso em que você pode ter uma escola como "Middleton Elementary School", apenas procurando por "middle", iria se enganar

    
por 01.06.2011 / 19:55
0

Coloque "Elementar", "Ensino Médio", "Ensino Médio", "" em B1: B4. Então, assumindo que sua lista está na coluna J e você deseja a lista processada na coluna K, insira a seguinte fórmula em K2 confirmando com Ctrl + Shift + Enter e copie.

=SUBSTITUTE(J2;INDEX(B$1:B$4;MIN(IF(ISERROR(FIND(B$1:B$4;J2));999;ROW(B$1:B$4)))-ROW(B$1)+1);"")

Obviamente, você pode adaptá-lo às suas necessidades.

    
por 06.06.2011 / 10:57