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:
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.
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.
Que puedo hacer, dado que la ventana del MsgBox, cuadro de mensajes generado, tiene demasiadas líneas y no puedo verlo en la pantalla de mi PC. Como puedo hacer para que muestre un scroll o varias columnas, o lo puedes reemplazar po un listbox.
ResponderEliminarAgradezco la atención que me puedas brindar
Gracias
Jorge
Hola Jorge,
Eliminarno creo sea posible hacerlo en un msgbox, pero sí empleando un TextBox dentro de un Userform... asegúrate de marcar la propiedad multiline.
Saludos
Buen día, he revisado éste tema y es el que mas/menos necesito, sin embargo, ¿cómo puedo hacer para que el número de fila inicial y final se almacenen en dos variables?, explico un poco, supongamos que el rango que me arrojó fue el $A$7:$A$10 y lo que necesito es que el valor 7 y 10 se almacenen en una variable, A=7 y B=10. Espero que alguien me pueda ayudar. De antemano, gracias por su ayuda y tiempo. Saludos
ResponderEliminarHola,
Eliminarpuedes usar las propiedades de un rango:
.TopLeftCell
.BottomRightCell
para recuperar la fila primera y última (y la primera y última columna) de un rango
SAludos
Muchas gracias por la respuesta, lo intentare y comento. Saludos
Eliminar