Di seguito vedremo un programma in Excel VBA che mette a confronto intervalli selezionati in modo casuale e mette in evidenza le cellule che sono unici. Se non si ha familiarità con link: / VBA-esempi-aree-raccolta [aree] ancora, ti consigliamo di leggere questo esempio prima.

Situazione:

Compare Ranges in Excel VBA

Nota: il valore solamente unico in questo esempio è il 3 in quanto tutti gli altri valori si verificano in almeno un’altra zona. Per selezionare Range ( “B2: B7, D3: E6, D8: E9”), tenere premuto CTRL e selezionare ogni area.

Posizionare un pulsante di comando nel foglio di lavoro e aggiungere le righe di codice che segue:

  1. In primo luogo, si dichiara quattro oggetti Gamma e due variabili di tipo Integer.

Dim rangeToUse As Range, singleArea As Range, cell1 As Range, cell2 As Range, i As Integer, j As Integer
  1. inizializzare l’rangeToUse oggetto Range con l’intervallo selezionato.

Set rangeToUse = Selection
  1. Aggiungere la linea che cambia il colore di tutte le cellule sfondo a ‘Nessun riempimento’. Anche aggiungere la riga che rimuove i confini di tutte le cellule.

Cells.Interior.ColorIndex = 0

Cells.Borders.LineStyle = xlNone
  1. Informare l’utente quando lui o lei sceglie una sola area.

If Selection.Areas.Count <= 1 Then

MsgBox "Please select more than one area."

Else

End If

Le righe di codice seguenti (a 5, 6 e 7) devono essere aggiunti tra Else e End If.

  1. Colore le cellule delle aree selezionate.

rangeToUse.Interior.ColorIndex = 38
  1. Border ogni area.

For Each singleArea In rangeToUse.Areas

singleArea.BorderAround ColorIndex:=1, Weight:=xlThin

Next singleArea
  1. Il resto di questo programma appare come segue.

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

Spiegazione: questo può sembrare un po ‘opprimente, ma non è poi così difficile. rangeToUse.Areas.Count uguale a 3, in modo che le prime due righe di codice riducono a for i = 1 a 3 e per j = i + 1 a 3. Per i = 1, j = 2, Excel VBA confronta tutti i valori della prima area con tutti i valori della seconda area. Per i = 1, j = 3, Excel VBA confronta tutti i valori della prima zona con tutti i valori della terza area. Per i = 2, j = 3, Excel VBA confronta tutti i valori della seconda zona con tutti i valori della terza area. Se i valori sono gli stessi, si imposta il colore di entrambe le cellule sfondo a ‘Nessun riempimento’, perché non sono unici.

Risultato quando si fa clic sul pulsante di comando sul foglio:

Compare Ranges Result