Uso de colores en Excel con macros
En este ejemplo te comparto una macro
para hacer una tabla con los 56 colores que se manejan por defecto en la paleta
de colores de Office.
Aunque
Office sólo nos muestre 56, realmente tenemos un límite de 16 millones de colores a usar.
Figura
1. Paleta de colores de Office.
Cómo obtener más colores
Cuando
asignamos un color al fondo de una celda o a la fuente nos encontramos con un
botón que dice Más colores, el cual nos permitirá
obtener más de los 56 de la paleta. Incluso si tenemos un código RGB de un color, también lo podemos obtener.
Figura
2. Obtener más de 56 colores.
Cómo uso colores con macros
Para poder
asignar un color a una celda o auna fuente, tenemos la propiedad ColorIndex, la cual podrá recibir colores del 1 al 56.
Si queremos darle un color rojo a la
celda activa usamos:
ActiveCell.Interior.ColorIndex = 3
Si queremos darle un color azul al
fuente de la celda activa usamos:
ActiveCell.Font.ColorIndex = 5
Aunque
también podemos utilizar la propiedad Color de la
siguiente manera.
ActiveCell.Interior.Color = vbRed
Para la
propiedad Color tenemos 8 constantes de
color a utilizar sin necesidad de saber el índice del color.
Figura
3. Constantes de color en vba:
vbBlack, vbWhite, vbRed, vbGreen, vbBlue, vbYellow, vbMagenta y vbCyan.
La siguiente tabla contiene los 56
colores de la tabla predeterminada de Office, así como su índice.
Código vba para generar la tabla de
colores
El siguiente código inserta una nueva
hoja en el libro activo y arma la tabla de colores.
Sub TablaDeColores()
'
ActiveWorkbook.Sheets.Add
'
Range("A1").Value = "INTERIOR"
Range("B1").Value = "FONT"
Range("C1").Value = "COLOR"
Range("D1").Value = "VBA COLOR"
'
For i = 1 To 56
Cells(i + 1, 1).Interior.ColorIndex = i
Cells(i + 1, 1).Value = "[Color " & i &
"]"
Cells(i + 1, 2).Value = "[Color " & i &
"]"
Cells(i + 1, 2).Font.ColorIndex = i
Cells(i + 1, 3).Value = "[Color " & i &
"]"
Next i
'
Range("D2").Value = "vbBlack"
Range("D2").Interior.Color =
vbBlack
Range("D3").Value = "vbWhite"
Range("D3").Interior.Color =
vbWhite
Range("D4").Value = "vbRed"
Range("D4").Interior.Color =
vbRed
Range("D5").Value = "vbGreen"
Range("D5").Interior.Color =
vbGreen
Range("D6").Value = "vbBlue"
Range("D6").Interior.Color =
vbBlue
Range("D7").Value = "vbYellow"
Range("D7").Interior.Color =
vbYellow
Range("D8").Value = "vbMagenta"
Range("D8").Interior.Color =
vbMagenta
Range("D9").Value = "vbCyan"
Range("D9").Interior.Color =
vbCyan
'
End Sub
Macro
para contar celdas con datos
Cuando trabajamos con macros en Excel
y dependemos de que el usuario ingrese valores en algunas celdas de nuestra
hoja, es común vernos en la necesidad de contar las celdas con datos de manera que podamos hacer las validaciones pertinentes. En esta
ocasión mostraré un par de alternativas que tenemos para realizar ese
tipo de cuenta desde VBA.
Para realizar el primer ejemplo de
este artículo utilizaré los datos capturados en el rango A1:C10 y además
necesitaré algunos botones de comando ActiveX que insertaré desde la ficha Programador y que
serán los encargados de ejecutar el código VBA desde su evento Click.

La
propiedad Count
Para nuestro primer ejemplo utilizaré
el objeto Range y una de sus propiedades
conocida como Count que nos indicará la cantidad
exacta de celdas que conforman el rango indicado. Considera el siguiente código
VBA:
|
1
2
3
|
Private Sub
CommandButton21_Click()
MsgBox
Range("A1:C10").Count
End Sub
|
El código ha sido insertado en el
evento Click del botón de comando y mostrará
un cuadro de diálogo con la cantidad de celdas del rango. Así que, al pulsar el
botón obtendré el siguiente resultado:

Es importante recordar que la
propiedad Count funcionará correctamente
mientras el rango no exceda de 2,147,483,647 de celdas. Si necesitas contar una
cantidad mayor de celdas, entonces será necesario utilizar la propiedad CountLarge.
Con este código hemos logrado contar
la totalidad de celdas dentro de un rango específico, pero para poder contar las
celdas con datos tenemos que restar aquellas
celdas que están vacías y eso será precisamente lo que haremos en la siguiente
sección.
El método
SpecialCells
Una manera de conocer las celdas que
están vacías es utilizar el objeto Range y su método SpecialCells el cual
recibe un parámetro para indicar el tipo de celdas que deseamos obtener. Un
posible valor para dicho parámetro es xlCellTypeBlanks que simboliza las celdas en blanco, así que podemos utilizar el
siguiente código VBA:
|
1
2
3
|
Private Sub
CommandButton22_Click()
MsgBox
Range("A1:C10").SpecialCells(xlCellTypeBlanks).Count
End Sub
|
Al ejecutar este código obtendremos
un resultado como el siguiente:

Ahora ya conoces el funcionamiento de
la propiedad Count y del método SpecialCells así que podremos crear fácilmente una macro para contar las celdas
con datos.
Macro para
contar celdas con datos
Para poder contar las celdas que
contienen datos dentro de un rango específico podemos restar las celdas en
blanco del total de las celdas del rango. Eso lo podemos lograr con el
siguiente código:
|
1
2
3
|
Private Sub
CommandButton23_Click()
MsgBox
Range("A1:C10").Count -
Range("A1:C10").SpecialCells(xlCellTypeBlanks).Count
End Sub
|
Observa que no he introducido ninguna
instrucción nueva sino que solamente he utilizado la propiedad Countpara obtener el total de celdas y posteriormente he restado las celdas
vacías con el método SpecialCells. Al
ejecutar este código obtenemos el siguiente resultado:

El rango A1:C10 está formado por 30
celdas, de las cuales 5 están vacías, así que solo existen 25 celdas con datos
por lo que el resultado de nuestra macro es correcto.
Más sobre
el método SpecialCells
En este primer ejemplo he utilizado
el método SpecialCells para
contar las celdas en blanco de un rango pero es posible utilizar dicho método
para contar celdas con ciertos tipos de dato especiales, como las celdas que
contienen fórmulas o las celdas que tienen comentarios. Lo único que debes
hacer es indicar el valor adecuado como su parámetro:
xlCellTypeAllFormatConditions: Celdas de cualquier formato
xlCellTypeAllValidation: Celdas que contienen criterios de validación
xlCellTypeBlanks: Celdas vacías
xlCellTypeComments: Celdas que contienen comentarios
xlCellTypeConstants: Celdas que contienen constantes
xlCellTypeFormulas: Celdas que contienen fórmulas
xlCellTypeLastCell: La última celda del rango usado
xlCellTypeSameFormatConditions: Celdas con el mismo formato
xlCellTypeSameValidation: Celdas con los mismos criterios de validación
xlCellTypeVisible: Todas las celdas visibles
En nuestro ejemplo utilizamos el
valor xlCellTypeBlanks para
contar las celdas en blanco de un rango, pero puedes hacer la prueba con los
diferentes valores disponibles para el método SpecialCells.
La función
CONTARA
Otra alternativa que tenemos para contar
celdas con datos desde VBA es
utilizar la función CONTARA que nos devolverá la cantidad de celdas que no
están vacías. Sin embargo, debes recordar que para utilizar una función de
Excel desde VBA es indispensable utilizar su nombre en inglés. El nombre en
inglés de la función CONTARA es COUNTA.
|
1
2
3
|
Private Sub
CommandButton21_Click()
MsgBox
WorksheetFunction.CountA(Range("A1:C10"))
End Sub
|
Como argumento de la función COUNTA
he indicado el mismo rango de celdas A1:C10 y como resultado obtenemos la
cuenta de las celdas que contienen datos.

Este resultado concuerda con el del
primer ejemplo, así que ahora ya conoces dos alternativas para contar las celdas
con datos desde VBA. Finalmente dejo el vínculo de descarga del libro de trabajo utilizado en la creación de los ejemplos de este
artículo.



No hay comentarios:
Publicar un comentario