Días atrás un lector me preguntaba por alguna manera de localizar las Celdas combinadas de una de nuestras hojas de Excel, entendiendo que eran varias y dentro de un informe dificil de localizar a simple vista.
Fue entonces cuando recordé dos propiedades del método Range en VBA que nos servirán para tal efecto:
Range.MergeCells
Range.MergeArea
La primera de ellas Range.MergeCells nos indicará si es True o False que el rango indicado contiene o no 'Celdas combinadas'. Esto nos vendría bien para repasar diferentes celdas y determinar si ésta pertenece o no a un conjunto combinado.
Mientras que Range.MergeArea devuelve el rango combinado que contiene la celda especificada (si la celda especificada no está en un rango combinado, la propiedad devolverá la celda especificada).
Ambas propiedades nos servirán para recorrer el rango a anailizar y determinar si correponde a una Celda combinada, y en caso afirmativo, obtener la dirección del rango combinado.
Comenzaremos nuestro ejemplo disponiendo en nuestra hoja de trabajo algunas Celdas combinadas:
Generamos nuestra macro, que incorporamos a un módulo del Explorador de proyectos del Editor de VBA:
Sub IdentificaCeldasCombinadas()
'inhabilitamos el refresco de pantalla
Application.ScreenUpdating = False
'controlamos un posible error, pasando al siguiente registro
On Error Resume Next
'recorremos cada celda del rango utilizado en la hoja de cálculo activa.
For Each celda In ActiveSheet.UsedRange
'verificamoss si dicha celda corresponde a una Celda combinada
If celda.MergeCells = True Then
'aglutinamos la dirección de la celda
'para mostrala posteriormente en un MsgBox
mensaje = mensaje & celda.Address & Chr(10)
'Modificamos la celda
With celda
'eliminando cualquier Comentario anterior
.ClearComments
'Añadimos uno nuevo...
.AddComment
'...donde insertamos un texto con la dirección del Rango combinado
.Comment.Text Text:="Excelforo:" & Chr(10) & celda.MergeArea.Address
'además le cambiamos el color de fondo a amarillo.
.Interior.Color = vbYellow
End With
End If
Next
'Mostramos todos los Comentarios...
Application.DisplayCommentIndicator = xlCommentAndIndicator
'Mostramos el mensaje final,
'con todas las referencias de las celdas combinadas (individualmente)
MsgBox mensaje
'activamos el refresco de pantalla
Application.ScreenUpdating = True
End Sub
Tras ejecutar nuestra macro de Excel sobre la Hoja anterior, vemos el resultado en la siguiente imagen:
En la imagen podemos ver, por un lado, el Cuadro de mensaje generado (MsgBox) con un listado de todas las celdas implicadas en alguna de las Celdas combinadas; por otro lado, directamente en al Hoja de cálculo vemos como todas las Celdas combinadas han cambiado el color de fondo por el amarillo y además se ha insertado un Comentario donde se incluye la dirección del rango combinada.