A continuación vamos a ver un programa en Excel VBA que compara los rangos seleccionados al azar y se destacan las células que son únicos. Si usted no está familiarizado con enlace: / VBA-ejemplos-áreas de recolección [áreas] sin embargo, es muy recomendable que lea este ejemplo primero.

Situación:

Compare Ranges in Excel VBA

Nota: el valor solamente es único en este ejemplo es el 3, ya que todos los demás valores se producen en al menos un área de más. Para seleccionar Range ( «B2: B7, D3: E6, D8: E9»), presione la tecla CTRL y seleccione cada área.

Coloque un botón de comando en la hoja de trabajo y añadir las líneas de código siguientes:

  1. En primer lugar, declaramos cuatro objetos Range y dos variables de tipo entero.

Dim rangeToUse As Range, singleArea As Range, cell1 As Range, cell2 As Range, i As Integer, j As Integer
  1. inicializar el objeto Range rangeToUse con el rango seleccionado.

Set rangeToUse = Selection
  1. Agregue la línea que cambia el color de fondo de todas las células a ‘Sin relleno’. También agregue la línea que elimina las fronteras de todas las células.

Cells.Interior.ColorIndex = 0

Cells.Borders.LineStyle = xlNone
  1. Informar al usuario cuando él o ella sólo selecciona un área.

If Selection.Areas.Count <= 1 Then

MsgBox "Please select more than one area."

Else

End If

Las siguientes líneas de código (en 5, 6 y 7) se deben añadir entre Else y End If.

  1. Color de las células de las áreas seleccionadas.

rangeToUse.Interior.ColorIndex = 38
  1. Border cada área.

For Each singleArea In rangeToUse.Areas

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

Next singleArea
  1. El resto de este programa se ve de la siguiente manera.

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

Explicación: esto puede parecer un poco abrumador, pero no es tan difícil. rangeToUse.Areas.Count es igual a 3, por lo que las dos primeras líneas de código se reducen a para i = 1 a 3 y para j i + 1 = a 3. Para i = 1, j = 2, Excel VBA compara todos los valores de la primera área con todos los valores de la segunda zona. Para i = 1, j = 3, Excel VBA compara todos los valores de la primera zona con todos los valores de la tercera zona. Para i = 2, j = 3, Excel VBA compara todos los valores de la segunda zona con todos los valores de la tercera zona. Si los valores son los mismos, se establece el color de fondo de ambas células a ‘Sin relleno’, porque no son únicos.

Como resultado al hacer clic en el botón de comando en la hoja:

Compare Ranges Result