A continuación, veremos un programa en Excel VBA que compara rangos seleccionados al azar y resalta celdas que son únicas. Si aún no está familiarizado con las áreas , le recomendamos que lea este ejemplo primero.

Situación:

Comparar rangos en Excel VBA

Nota: el único valor único en este ejemplo es el 3 ya que todos los demás valores ocurren en al menos un área más. Para seleccionar Rango ("B2: B7, D3: E6, D8: E9"), mantenga presionada la tecla Ctrl y seleccione cada área.

Coloque un botón de comando en su hoja de trabajo y agregue las siguientes líneas de código:

1. Primero, declaramos cuatro objetos Range y dos variables de tipo Integer.

Dim rangeToUse As Range, singleArea As Range, cell1 As Range, cell2 As Range, i As Integer, j As Integer

2. Inicializamos el objeto Range rangeToUse con el rango seleccionado.

Set rangeToUse = Selection

3. Agregue la línea que cambia el color de fondo de todas las celdas a 'Sin relleno'. También agregue la línea que elimina los bordes de todas las celdas.

Cells.Interior.ColorIndex = 0
Cells.Borders.LineStyle = xlNone

4. Informar al usuario cuando solo seleccione 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) deben agregarse entre Else y End If.

5. Colorea las celdas de las áreas seleccionadas.

rangeToUse.Interior.ColorIndex = 38

6. Borde cada área.

For Each singleArea In rangeToUse.Areas
    singleArea.BorderAround ColorIndex:=1, Weight:=xlThin
Next singleArea

7. El resto de este programa tiene el siguiente aspecto.

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 For i = 1 a 3 y For 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 área con todos los valores de la tercera área. Para i = 2, j = 3, Excel VBA compara todos los valores de la segunda área con todos los valores de la tercera área. Si los valores son los mismos, establece el color de fondo de ambas celdas en 'Sin relleno', porque no son únicas.

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

Resultado de comparación de rangos

14/14 ¡Completado! Más información sobre el objeto de rango>
Siguiente capítulo: Variables