Comparer les plages dans Excel VBA
Ci-dessous, nous examinerons un programme dans Excel VBA qui compare les plages sélectionnées au hasard et met en évidence les cellules qui sont uniques. Si vous n’êtes pas familier avec lien: / vba-exemples-zones de collecte [zones]
encore, nous vous recommandons fortement de lire cet exemple d’abord.
Situation:
Note: la seule valeur unique dans cet exemple est le 3 puisque toutes les autres valeurs se produisent dans au moins une autre zone. Pour sélectionner Range ( « B2: B7, D3: E6, J8: E9 »), maintenez la touche Ctrl enfoncée et sélectionnez chaque zone.
Placez un bouton de commande sur votre feuille de calcul et ajoutez les lignes de code suivant:
-
Tout d’abord, nous déclarons quatre objets Range et deux variables de type entier.
Dim rangeToUse As Range, singleArea As Range, cell1 As Range, cell2 As Range, i As Integer, j As Integer
-
Nous initialisons l’objet Range rangeToUse avec la plage sélectionnée.
Set rangeToUse = Selection
-
Ajoutez la ligne qui change la couleur de fond de toutes les cellules à « Aucun remplissage ». Ajoutez également la ligne qui supprime les frontières de toutes les cellules.
Cells.Interior.ColorIndex = 0 Cells.Borders.LineStyle = xlNone
-
Informer l’utilisateur quand il ou elle sélectionne une seule zone.
If Selection.Areas.Count <= 1 Then MsgBox "Please select more than one area." Else End If
Les lignes suivantes de code (à 5, 6 et 7) doivent être ajoutés entre Else et End If.
-
Couleur les cellules des zones sélectionnées.
rangeToUse.Interior.ColorIndex = 38
-
Border chaque zone.
For Each singleArea In rangeToUse.Areas singleArea.BorderAround ColorIndex:=1, Weight:=xlThin Next singleArea
-
Le reste de ce programme semble que suit.
For i = 1 To rangeToUse.Areas.Count For j = i + 1 To rangeToUse.Areas.Count For Each cell1 In rangeToUse.Areas(i) For Each cell2 In rangeToUse.Areas(j) If cell1.Value = cell2.Value Then cell1.Interior.ColorIndex = 0 cell2.Interior.ColorIndex = 0 End If Next cell2 Next cell1 Next j Next i
Explication: cela peut sembler un peu écrasante, mais il est pas si difficile. rangeToUse.Areas.Count est égal à 3, de sorte que les deux premières lignes de code à réduire pour i = 1 à 3 et j = i + 1 à 3. Pour i = 1, j = 2, Excel VBA compare toutes les valeurs de la première zone avec toutes les valeurs de la seconde zone. Pour i = 1, j = 3, Excel VBA compare toutes les valeurs de la première zone avec toutes les valeurs de la troisième zone. Pour i = 2, j = 3, Excel VBA compare toutes les valeurs de la seconde zone avec toutes les valeurs de la troisième zone. Si les valeurs sont les mêmes, il définit la couleur d’arrière-plan des deux cellules « Aucun remplissage », parce qu’ils ne sont pas uniques.
Lorsque vous cliquez sur le bouton de commande sur la feuille: