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:
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:
14/14 ¡Completado! Más información sobre el objeto de rango>
Siguiente capítulo: Variables