jueves, 17 de noviembre de 2016

exel

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.
Paleta de colores de Office
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.
Obtener hasta 16 millones de colores en Excel
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.
Colores en Excel
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.
Tabla de 56 colores en Excel

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.
Macro para contar celdas con datos
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:
Macros para contar celdas en blanco o con datos
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:
Macro para contar celdas en Excel
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:
Macro de Excel para contar celdas con datos
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.
Contar celdas con datos utilizando una macro de Excel
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