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.
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".
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)
Après la course du VBA
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.
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.
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