Localiza uma cadeia de texto sem distinção entre maiúsculas e minúsculas dentro de um intervalo de células

3

Eu tenho um problema para resolver no Excel, e não sei ao certo como fazer isso. Fiz algumas pesquisas on-line e não encontrei nenhuma fórmula que pareça ser útil. Aqui está a situação (simplificada apenas um pouco, para o propósito desta questão):

Eu tenho dados nas colunas A-E. Preciso corresponder os dados nas células em A e B, com dados em C-E, e retornar TRUE ou FALSE para a coluna F.

Retorna TRUE se:
 - A string em A é encontrada em qualquer string em C-E.
OR
 - A string em B é encontrada em qualquer string em C-E.

Caso contrário, retorne FALSE.

As sequências devem ser correspondências exatas para sequências inteiras ou parciais dentro do intervalo, mas a função correspondente não diferencia maiúsculas de minúsculas. Eu tirei uma captura de tela de uma folha de exemplo para referência.

Tenho quase certeza de que precisarei usar IF ou na camada mais externa da fórmula, provavelmente seguida por OR. Então, para os argumentos para OR, estou esperando que haja algum uso de IFERROR envolvido. Mas o que estou perdendo é a função que eu poderia usar com mais eficiência para lidar com as pesquisas de texto.

O VLOOKUP é muito limitado a esse respeito, eu acho. Ele pode ser viável para fazer uma sequência inteira contra comparações de cadeias inteiras, mas tenho certeza de que ele não retornará resultados precisos para correspondências parciais de cadeias de caracteres. FIND e SEARCH parecem limitados a apenas pesquisas de um único destino e também diferenciam maiúsculas de minúsculas. Suponho que eu poderia usar UPPER ou LOWER para forçar a insensibilidade a maiúsculas e minúsculas na pesquisa, mas ainda preciso de algo que possa fazer correspondência parcial precisa e pesquisar um intervalo especificado de células.

Existe alguma função ou combinação de funções que funcione aqui?

Idealmente, quero fazer isso com uma fórmula do Excel simples. Eu não estou familiarizado com o VBScript ou ferramentas similares, nem tenho tempo para aprendê-lo para este projeto.

    
por Iszi 11.04.2012 / 05:36

3 respostas

2

Esta é a minha solução suja, não sei se é a melhor.

Você deve adicionar uma coluna temporária e depois ocultá-la. E tente converter todos os dados em minúsculas ou maiúsculas e siga a lógica que você já fez.

Assim:

A2: ABcdeF
B2: =lower(A2) --> abcdef
C2: aBc
D2: =lower(C2) --> abc
E2: =find(D2, B2) --> found
F2: =find('poi', B2) --> not found

A função VLOOKUP possui um parâmetro opcional: range_lookup

Um valor lógico (TRUE ou FALSE apenas) que indica se você deseja que o VLOOKUP encontre uma correspondência exata ou aproximada ao lookup_value

link

    
por 11.04.2012 / 05:50
0

Tente combinar o texto dessas células, esse é o meu truque:

A1: a
A2: b
A3: c
B1: ">" & A1 & "<" --> >a<
B2: = B1 & ">" & A2 & "<" --> >a<>b<
B3: = B2 & "<" & A3 & "<" --> >a<>b<>c<

... você pode automatizar usando o excel, apenas acredite que leva menos de 1 min: -)

para que a célula final combine todo o texto de todas as células

Depois, faça a pesquisa comum, mas inclua ">" e "<" aos seus critérios, algo como

=find(">" & "abc" & "<", $B$3)

e mais uma vez é o meu truque sujo!

    
por 11.04.2012 / 07:11
0

Ideally, I want to do this with a straight Excel formula. I'm not at all familiar with VBScript or similar tools, nor do I have time to learn it for this project.

O método Range.Find do VBA existe apenas para essas tarefas. Seria uma pena não usá-lo. :)

Sintaxe

Range.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

Precisamos apenas de 3 dos parâmetros para sua tarefa. Deixe o resto de fora

  • Intervalo : o intervalo em que pesquisar
  • O que: Os dados para pesquisar
  • LookAt: pode ser um xlWhole (correspondência completa) ou xlPart (correspondência parcial)
  • MatchCase: True para tornar a pesquisa sensível a maiúsculas e minúsculas. Falso para uma pesquisa insensível a maiúsculas e minúsculas

Um pequeno exemplo seria parecido com

 Set result = Columns(C:E).find(what:=[A1], LookAt:=xlPart, MatchCase:=false)

Este código respeita suas condições adicionais, como

  • Verifique os dados da coluna A e coluna B. Se um deles corresponder, retorne verdadeiro
  • Retorna verdadeiro mesmo com correspondências parciais
  • Ignorar maiúsculas ou minúsculas
  • Retorna verdadeiro ou falso na coluna F
Sub SearchMatches()    
For i = 2 To 5    
    On Error Resume Next
    Set checkColA = Columns("C:E").Find(Cells(i, 1), , , xlPart, , , False)
    Set checkColB = Columns("C:E").Find(Cells(i, 2), , , xlPart, , , False)
    On Error GoTo 0        
    If checkColA Is Nothing And checkColB Is Nothing Then
        Cells(i, 6) = False
    Else
        Cells(i, 6) = True
    End If        
Next i    
End Sub

    
por 16.05.2015 / 10:18