web-dev-qa-db-fra.com

Comparez plusieurs colonnes pour deux cellules ou plus dans la même ligne ayant le même contenu

J'ai besoin d'une formule pour comparer plusieurs colonnes pour deux cellules ou plus dans la même ligne ayant le même contenu. Si cela est vrai, affichez "le texte A" (peut être quelque chose de tel que "vrai"). Si toutes les valeurs sont différentes, affichez "Texte B" ou simplement "False".

J'utilise une formule IF, mais cela prendra du temps s'il existe de nombreuses colonnes à comparer, alors j'ai besoin d'une meilleure formule.

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

Il en va de même avec une fonction similaire avec OR (résultant de vrai ou de faux)

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

Vous trouverez ci-dessous une capture d'écran de la feuille de calcul, qui n'est qu'un exemple. Mon travail réel a plus de 4 colonnes.

enter image description here

Les lignes en surbrillance sont celles où il y a deux cellules ou plus contenant le même texte (le groupe 2 doit également être mis en surbrillance), par conséquent, ceux-ci doivent afficher le message "Texte A".

Voir ma feuille de calcul en ligne

3
Steven Antonius

Ce VBA le fait ( Comment ajouter VBA ). J'ai fourni quelques options afin que vous puissiez l'amplifier à l'avenir, consultez les 12 premières lignes environ, où vous pouvez taper dans les différentes "réponses". Vous pouvez choisir qui est la ligne de départ et la ligne de fin, où les résultats seront affichés et quels mots pour montrer s'il y a une correspondance de texte ou non! Veuillez noter que la surbrillance est due à la DOC Excel que vous avez fournie et rien à voir avec le code.

Avant d'exécuter un script VBA, faites une sauvegarde du fichier - il n'y a généralement aucune option d'annulation!

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

J'ai écrit les résultats au col g (pour garder votre original tel quel)

enter image description here

Après la course du VBA

enter image description here

1
Dave

Formule pour D2 sur la capture d'écran:

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

Entrez-le comme formule de tablea en appuyant sur Ctrl + Shift + Enter lors de la modification de la formule. Après cela, il peut être glissé (ou double-cliqué) par le coin inférieur droit pour couvrir toutes les lignes.

enter image description here

0
Mykola Novik

J'utiliserais le complément de la requête électrique pour cela. Il a une commande de groupe avec une fonction de comptage distincte pouvant comprendre cela sur toute combinaison de lignes et/ou de colonnes.

J'ai construit un prototype que vous pouvez afficher ou télécharger - sa "démonstration de requête d'alimentation - comparer plusieurs colonnes pour des valeurs uniques.xlsx" dans mon entraînement:

https://onedrive.live.com/redir?resid=4fa287bbc10ec562%21398

Remarque Vous pouvez continuer à ajouter des colonnes et/ou des lignes à la feuille d'entrée, puis appuyez simplement sur Actualiser le total dans le ruban de données pour reproduire les requêtes de puissance.

90% de cela a été construit simplement en cliquant sur le ruban de requête d'alimentation. La seule exception était la simple déclaration "si" que j'ai écrite dans la dernière étape de la requête "Comparer plusieurs colonnes". Donc, il y a beaucoup moins de code à entretenir, comparé à une formule ou à une solution VBA.

0
Mike Honey

Pour la cellule F2:

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

Cela vous donnera true quand il y a trois valeurs distinctes dans ces trois colonnes.

Adapté d'un site qui inclut plus d'explications et une option pour traiter des blancs: https://exceljet.net/formula/count-unique-text-values-in-a-range

Le même site touche à Countif et au potentiel de problèmes de performance avec de grands ensembles de données: https://exceljet.net/formula/count-unique-values-in-a-range-with-countif

0
cu_