martes, 4 de octubre de 2016

Los Estilos de Celda en Excel

A todos nos ha ocurrido alguna vez que, al trabajar con distintos libros de Excel, copiando y pegando información de celdas entre varios libros.. finalmente comprobamos que nuestros formatos de algunas celdas cambian misteriosamente.
El causante de este misterio suelen ser los Estilos de celdas.


Para acceder a la configuración, modificación, eliminación o duplicación de Estilos de celda navegaremos por la Ficha Inicio > grupo Estilo > botón Estilos de celda:

Los Estilos de Celda en Excel



Hace ya algún tiempo escribí algo al respecto (ver aquí).

En definitiva, no lo olvidemos, un Estilo es una configuración que afecta únicamente al formato de nuestras celdas, según una propiedades determinadas que afecta al formato de:
1- número
2- alineación
3- fuente
4- bordes
5- relleno
6- protección
es decir, las propiedades habituales que podemos definir en un formato de celda.

Los Estilos de Celda en Excel



¿Qué ocurre en ocasiones cuando trabajamos con estilos personalizados?, pues que al copiar y pegar contenidos de celdas o rangos entre libros, trasladamos esos estilos personalizados/modificados entre dichos libros; y en consecuencia podemos afectar a nuestros formatos sin desearlo, heredando estos estilos...
Veamos la siguiente imagen, resultado obtenido tras copiar y pegar celdas de otros libros con estilos personalizados sobre un libro SIN estilos personalizados (únicamente los estilos por defecto):

Los Estilos de Celda en Excel



Para evitar interferencias indeseables sobre nuestro libro de trabajo, lo recomendable sería eliminar cada estilo de celda personalizado.. basta hacer clic derecho y presionar Eliminar...
Si bien, cuando existen muchos estilos personalizados, el trabajo puede resultar tedioso. Para estos casos mejor emplear esta sencilla macro de Excel insertado en un módulo estándar de nuestro proyecto VB:

Sub Elimina_Todos_Estilos_Personalizados()
Dim estilo As Style

'recorremos los estilos de este libro de trabajo
For Each estilo In ThisWorkbook.Styles
    'evaluamos si el estilo no corresponde a alguno por defecto de la aplicación
    'en cuyo caso (es estilo personalizado) y lo eliminamos
    If Not estilo.BuiltIn Then estilo.Delete
Next estilo
 
End Sub



Otro sencillo procedimiento en VBA para Excel, esta vez una Function que puede sernos útil es:

Function EstiloDeCelda(celda As Range) As String
'la propiedad .Style nos indica el nombre del estilo de celda
EstiloDeCelda = celda.Style
End Function



Otra posibilidad, quizá recomendable, antes de eliminar los estilos de celda, sería aplicar el siguiente procedimiento para localizar las celdas con un estilo concreto buscado:

Sub LocalizaEstiloCelda()
Dim rRange As Range, celda As Range
Dim comparada As Range
Dim contador As Long

'buscamos estilos coincidente con el de la celda seleccionada (solo una)
Set comparada = Selection
'en caso de selccionar más de una celda, salimos del procedimiento
If comparada.Count > 1 Then Exit Sub

contador = 0
'recorremos todas las hojas del libro
For Each sh In Worksheets
    'definimos el rango de celdas usadas en cada hoja
    Set rRange = sh.UsedRange
    'y las recorremos
    For Each celda In rRange
        'comparando su estilo con el de la celda seleccionada
        If celda.Style = comparada.Style Then
            'en caso de coincidencia incrementamos el contador
            contador = contador + 1
            'y mostramos la dirección completa
            MsgBox celda.Address(external:=True)
        End If
    Next celda
Next sh

'Acabamos mostrando un mensaje que nos dice el númer de celdas con ese estilo
MsgBox "Número de celdas con estilo coincidente en el libro:= " & contador
End Sub



Por ejemplo lanzando el proceso sobre nuestro libro:

Los Estilos de Celda en Excel


Vemos como he asignado a las celdas B3, D3 y F3 el mismo estilo de celda: Bueno.

Si ahora lanzamos la macro LocalizaEstiloCelda con la celda B3 seleccionada, tendríamos para cada celda coincidente del Libro de Excel:

Los Estilos de Celda en Excel


Acabará el procedimiento con el último mensaje:

Los Estilos de Celda en Excel



Para este último procedimiento se podría sustituir el segundo loop (for each.. next) por el método .Find para agilizar la búsqueda...

No hay comentarios:

Publicar un comentario en la entrada