Compare várias colunas para quaisquer duas ou mais células dentro da mesma linha com o mesmo conteúdo

3

Eu preciso de uma fórmula para comparar várias colunas para quaisquer duas ou mais células na mesma linha que tenham o mesmo conteúdo. Se isso for verdade, exiba "TEXT A" (pode ser qualquer coisa como "TRUE"). Se todos os valores forem diferentes, exiba "TEXT B" ou simplesmente "FALSE".

Estou usando uma fórmula IF , mas será demorado se houver muitas colunas para comparar. Por isso, preciso de uma fórmula melhor.

=IF((B2=C2);"YES";IF((B2=D2);"YES";IF((C2=D2);"YES";"ALL DIFFERENT")))

O mesmo acontece com função semelhante com OR (resultou em verdadeiro ou falso)

=AND(($C2<>$D2);($C2<>$E2);($D2<>$E2))

Abaixo está uma captura de tela da planilha, que é apenas um exemplo. Meu trabalho real tem mais de 4 colunas.

Aslinhasdestacadassãoaquelasemqueháduasoumaiscélulascontendoomesmotexto(oGrupo2tambémdeveserdestacado),portanto,elasdevemexibiramensagem"TEXTO A".

Visualizar minha planilha on-line

    
por Steven Antonius 04.12.2014 / 09:24

7 respostas

1

Este VBa faz isso ( como adicionar VBa ). Eu forneci algumas opções para que você possa escalá-lo no futuro, confira as primeiras 12 linhas ou mais, onde você pode digitar as várias 'respostas'. Você pode escolher qual é a linha inicial e a linha final, onde os resultados serão exibidos e quais palavras serão exibidas se houver uma correspondência de texto ou não. Por favor note, o destaque é devido ao Excel Doc que você forneceu, e nada a ver com o código.

Antes de executar um script VBa, faça um backup do arquivo - geralmente não há opção de desfazer!

Sub DoTheThing()

'Answer these questions or ye walk the plank

Dim row As Integer
row = 2

Dim firstColumn As String
firstColumn = "B"

Dim lastColumn As String
lastColumn = "D"

Dim resultsColumn As String
resultsColumn = "G"

Dim isFoundText As String
isFoundText = "YES"

Dim isNotFoundText As String
isNotFoundText = "Good Job"

'***Below be for the cap'ains eyes only.

Do While Range("A" & row).Value <> ""

    Dim startChar As Integer
    startChar = Asc(firstColumn)

    Dim endChar As Integer
    endChar = Asc(lastColumn)

    Dim i As Integer

    Dim hasMatch As Boolean
    hasMatch = False

    For i = startChar To endChar

    If Range(Chr(i) & row).Value = Range(Chr(i + 1) & row).Value Then

        hasMatch = True

    End If

    If Range(Chr(startChar) & row).Value = Range(Chr(i + 1) & row).Value Then

        hasMatch = True

    End If

    Next i

    If (hasMatch) Then
        Range(resultsColumn & row).Value = isFoundText
    Else
        Range(resultsColumn & row).Value = isNotFoundText
    End If

row = row + 1


Loop

End Sub

Eu escrevi os resultados para Col G (para manter seu original como está)

Depoisqueovbaéexecutado

    
por 04.12.2014 / 11:55
0

Existe uma maneira simples de fazer isso com fórmulas. Deixe-me salientar que o exemplo mostra casos que envolvem apenas correspondências que incluem a primeira coluna. Qualquer fórmula deve ser testada em relação a um exemplo que contenha correspondências aleatórias.

Vou explicar isso em duas partes, já que o número de colunas pode variar. A primeira parte é uma expressão que você cria para o número necessário de colunas. Eu adicionei uma coluna de dados para ilustrar melhor a fórmula e incluí alguns casos com correspondências aleatórias:

Aexpressãoparaquatrocolunasdedadosésemelhanteaessa(mostradanalinha2,aprimeiralinhadedados):

COUNTIF(C2:E2,B2)+COUNTIF(D2:E2,C2)+(D2=E2)

SeNforonúmerodecolunasdedados,afórmulacontémN-1termos.Oprimeirotermocontaquantascolunaspossuemvaloresiguaisaoprimeiro.Osegundocontaquantasdascolunasrestantessãoiguaisaosegundo.Eassimpordiante.TodospodemserCOUNTIFs,masuseicomotermomaissimplesparaoúltimocaso.Emvezdecontarumacoluna,apenastestoseopenúltimoéoúltimo.UmresultadodeTrueéreconhecidocomoumvalorde1,Falsecomoumvalorde0.Setodososvaloresforemexclusivos,essaexpressãoseráiguala0.Casocontrário,seráumnúmeromaior.AexpressãovaidentrodeumtesteIF:

=IF(<expression>=0,"Unique Message","Match Message")

Assim, para quatro colunas de dados, a fórmula seria:

    =IF(COUNTIF(C2:E2,B2)+COUNTIF(D2:E2,C2)+(D2=E2)=0,"Unique Message","Match Message")

O resultado é assim:

    
por 04.12.2014 / 20:25
0

Eu usaria o suplemento de consulta de energia para isso. Ele tem um comando Group com uma função Count Distinct que pode descobrir isso em qualquer combinação de linhas e / ou colunas.

Eu criei um protótipo que você pode visualizar ou fazer o download - é a demonstração "Power Query - compare várias colunas para valores únicos.xlsx" no meu One Drive:

link

Observe que você pode continuar adicionando colunas e / ou linhas à planilha de entrada e, em seguida, simplesmente pressionar Atualizar tudo na faixa de opções Dados para reprocessar as Consultas de energia.

90% disso foi criado clicando na faixa de opções do Power Query. A única exceção foi a simples instrução "if" que escrevi na última etapa da consulta "Comparar várias colunas". Portanto, há muito menos código para manter, em comparação com uma fórmula ou uma solução VBA.

    
por 08.12.2014 / 05:11
0

Para a célula F2:

=IF(SUMPRODUCT(--(FREQUENCY(MATCH(B2:D2,B2:D2,0),COLUMN(B2:D2)-COLUMN(B2)+1)>0))=3,TRUE,FALSE)

Isso lhe dará True sempre que houver três valores distintos nessas três colunas.

Adaptado de um site que inclui mais explicações e uma opção para lidar com espaços em branco: link

O mesmo site toca em countifs e no potencial para problemas de desempenho com grandes conjuntos de dados: link

    
por 17.03.2016 / 01:36
0

Solução de duas etapas sem fórmulas de matriz:

Etapa1:paracadacolunacalculeonúmerodeocorrências.Seformaiorque1,coloque1,casocontrário,stringvazia.FórmulaparaacélulaD2nacapturadetela:

=IF(COUNTIF($A2:$C2,A2)>1,1,"")

Esta fórmula pode ser arrastada (ou clicada duas vezes) pelo canto inferior direito para cobrir todas as linhas, depois toda a linha D selecionada pode ser arrastada pelo canto inferior direito para cobrir todas as colunas.

Passo 2 : Para cada linha, verifique se existe algum "1"

Fórmula para a célula G2 na captura de tela:

=IF(SUM($D2:$F2)>0,"YES","Good Job")

Esta fórmula pode ser arrastada (ou clicada duas vezes) pelo canto inferior direito para cobrir todas as linhas.

Para torná-lo melhor, você pode considerar mover os cálculos intermediários para outra planilha.

    
por 02.08.2017 / 12:27
0

Fórmula para D2 na captura de tela:

=IF(MAX(COUNTIF($A2:$C2, $A2:$C2))>1,"YES","Good job")

Insira-o como uma fórmula de matriz da pressionando Ctrl + Shift + Enter ao editar a fórmula. Depois disso, ele pode ser arrastado (ou clicado duas vezes) pelo canto inferior direito para cobrir todas as linhas.

    
por 02.08.2017 / 12:31
-3

Você pode usar esta fórmula:

=IF(Cell Number > 2nd cell Number, result)
    
por 13.02.2017 / 16:05