Je fais donc une macro pour faire un tas de choses. une chose est de trouver des doublons de cellules dans sheet1 à partir de sheet2. étant donné la colonne A de la feuille 1, les valeurs de la colonne B de la feuille 2 correspondent-elles à l'une des valeurs de la colonne feuille 1.
Je sais qu'il y a une suppression des doublons, mais je veux juste les marquer, pas les supprimer.
Je pensais à quelque chose avec le filtrage. Je sais que lorsque vous filtrez, vous pouvez sélectionner plusieurs critères, donc si vous avez une colonne avec 20 valeurs différentes, vous pouvez sélectionner 5 valeurs dans le filtre et il affichera des lignes avec ces 5 valeurs pour la colonne particulière. J'ai donc enregistré une macro de cela et vérifié le code, et je vois pour cela qu'il utilise un tableau de chaînes, où chaque valeur à rechercher est dans un tableau de chaînes. Existe-t-il un moyen de simplement spécifier une colonne entière et d'ajouter chaque valeur au tableau de chaînes?
merci d'avance
Voici trois façons différentes de charger des éléments dans un tableau. La première méthode est beaucoup plus rapide mais stocke simplement tout dans la colonne. Vous devez être prudent avec cela car cela crée un tableau multidimensionnel qui n'est pas quelque chose qui peut être transmis à AutoFilter.
Méthode 1:
Sub LoadArray()
Dim strArray As Variant
Dim TotalRows As Long
TotalRows = Rows(Rows.Count).End(xlUp).Row
strArray = Range(Cells(1, 1), Cells(TotalRows, 1)).Value
MsgBox "Loaded " & UBound(strArray) & " items!"
End Sub
Méthode 2:
Sub LoadArray2()
Dim strArray() As String
Dim TotalRows As Long
Dim i As Long
TotalRows = Rows(Rows.Count).End(xlUp).Row
ReDim strArray(1 To TotalRows)
For i = 1 To TotalRows
strArray(i) = Cells(i, 1).Value
Next
MsgBox "Loaded " & UBound(strArray) & " items!"
End Sub
si vous connaissez les valeurs à l'avance et que vous souhaitez simplement les répertorier dans une variable, vous pouvez attribuer une variante à l'aide de Array ()
Sub LoadArray3()
Dim strArray As Variant
strArray = Array("Value1", "Value2", "Value3", "Value4")
MsgBox "Loaded " & UBound(strArray) + 1 & " items!"
End Sub
je ne sais pas si quelqu'un d'autre aura ce problème ou non, alors j'ai pensé publier la réponse que j'ai trouvée. J'aime la solution du tableau publiée par @Ripster (et merci pour cela, cela a presque fonctionné) mais cela ne fonctionnera pas vraiment dans ce cas. Ce avec quoi je travaille est une grande feuille de données avec 1 colonne ID, et je veux vérifier d'autres feuilles pour voir s'il y a des doublons dans cette feuille (en utilisant la colonne ID). ne supprimez pas cependant, marquez juste pour que je puisse les vérifier. Avec potentiellement plus de 50 000 lignes, une boucle sur chaque ligne prendrait beaucoup de temps.
Donc, ce que j'ai compris, je peux faire est de copier la colonne ID de l'autre feuille dans la feuille principale et d'utiliser l'option de mise en forme conditionnelle pour marquer les doublons dans une certaine couleur. (Cela marquera les lignes dans les deux colonnes), puis je peux filtrer la colonne par couleur pour ne me montrer que la couleur que j'ai utilisée pour marquer les doublons. Si j'ajoute par programme une colonne à la feuille que je vérifie avec les numéros de ligne, je peux même inclure cette colonne dans la feuille principale, donc quand je filtre pour la couleur, je peux voir quelles lignes elles étaient dans leur feuille.
Après cela, je peux enregistrer et adapter une macro pour le faire automatiquement pour mes collègues moins enclins à la programmation
Merci beaucoup à tous!
Après avoir sélectionné les colonnes à comparer, voici le code pour marquer les doublons avec du texte rouge et sans remplissage. -- Selection.FormatConditions.AddUniqueValues Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority Selection.FormatConditions(1).DupeUnique = xlDuplicate With Selection.FormatConditions(1).Font .Color = -16383844 .TintAndShade = 0 End With Selection.FormatConditions(1).StopIfTrue = False
puis, puisque les deux colonnes ont les doublons marqués, vous sélectionnez celui que vous voulez réellement examiner et voici le code à filtrer:
`Selection.AutoFilter
ActiveSheet.Range("$C$1:$C$12").AutoFilter Field:=1, Criteria1:=RGB(156, 0 _
, 6), Operator:=xlFilterFontColor`
(dans mon test, j'ai utilisé la colonne c comme filtre, qui peut être programmée avec une référence cells()
ou une sorte de référence range(cells(), cells())
Je souhaite à tous la meilleure des chances dans leurs futures réalisations! merci encore à @ripster