web-dev-qa-db-fra.com

Placer la colonne entière (chaque valeur dans la colonne) dans un tableau?

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

8
user1759942

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
15
Ripster

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!


Modifier - Code ajouté

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

1
user1759942