Son muchas las situaciones que encontraremos al trabajar con celdas combinadas. Una de ellas es la de ajustar el alto de filas.
En entrada de Febrero 2018 ya se publicaron varias macros resolviendo situaciones de esta índole, explicadas en videos 1 y 3 de mi canal.
NOTA: al continuación del siguiente ejemplo agrego otro caso: combinar cualquier rango de columnas seleccionando la celda del título.
Aquí vamos a ver otro modo de resolverlo que utilizaremos en el modelo desarrollado desde el evento WorkSheets_Change.
Cuando se trata de tablas de mucho contenido sería conveniente rellenarla primero y así tenemos más visibles todos los datos y luego ejecutar el evento Before_Doble_Click.
La macro se ejecutará al doble clic de cualquier celda dentro de la tabla.
Private
Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Row < 4
Then Exit Sub
x = Range("A1").CurrentRegion.Rows.Count
'alto normal de la
fila
alto = 15
'se recorre la tabla de datos
For i = 4 To x
resulta
= 0
'se
evalúa cuántos saltos de renglón existen en texto
Set D = Cells(i, 4): Set E = Cells(i, 5)
'ancho
de cada col
anchotexto = Len(D)
anchocol = D.ColumnWidth + E.ColumnWidth
If anchotexto > anchocol Then
'calculo
dif = (anchotexto - anchocol) / anchocol
If dif <= 1 Then
resulta = 2
Else
resulta = dif + 2
End If
'se asigna el alto obtenido
If resulta > 0 Then Range("A" & i).RowHeight = (alto *
resulta)
End If
Next i
[D3].Select
End Sub
NUEVO EJEMPLO: Al seleccionar con doble clic una celda combinada, la macro ajustará las columnas ocupadas, en todas las filas. NO se necesita indicar en la macro de cuáles columnas se trata. Para un ejemplo como el de la siguiente imagen, se puede ejecutar tanto para el rango D:E o también J:L.
'si la celda seleccionada no está combinada se cancelaIf Target.MergeCells = False Then Exit Sub'cant de col del rango seleccionadocanti = Target.Count'primera col del targetcolx = Target.Column
'obtener el ancho total de las col combinadas, por ej: J:LFor a = colx To colx + canti - 1anchocol = anchocol + Cells(1, a).ColumnWidthNext a'total de filas de la tablax = Range("A1").CurrentRegion.Rows.Count'alto normal de la filaalto = 15'se recorren todas las filas ocupadas a partir de la fila 4....AJUSTARFor i = 4 To xresulta = 0'se evalúa cuántos saltos de renglón existen en textoSet D = Cells(i, colx)'ancho de cada colanchotexto = Len(D)If anchotexto > anchocol Then'calculodif = (anchotexto - anchocol) / anchocolIf dif <= 1.5 Then 'si son muchas col probar con <= 1If dif <= 0.4 Then 'ajustar según el tamaño de la fuenteresulta = 1Elseresulta = 2End IfElseresulta = dif + 2End If'se asigna el alto obtenidoIf resulta > 0 ThenRange("A" & i).RowHeight = (alto * resulta)'si las celdas aún no tienen ajuste de texto, se agrega ahoraWith Cells(i, colx).HorizontalAlignment = xlLeft.VerticalAlignment = xlCenter.WrapText = TrueEnd WithEnd IfEnd IfNext i[A4].Select 'AJUSTAREnd Sub
El libro con el primer ejemplo puede descargarse desde aquí
El segundo código no funciona..
ResponderBorrarHola Fran. ¿Podrías enviarme tu hoja para que vea su formato y si copiaste la macro correcta?. Son muchas las situaciones posibles por eso fui publicando ejemplos en diferentes videos. Quizás estás tomando una macro que no es para el formato de tu hoja. Mis correos aparecen en mi perfil o en la sección Contactos de mi web. Sdos!
BorrarHay 2 detalles que debes tener en cuenta. En el 2do ejemplo hay un bucle para calcular el ancho total de la celda combinada, que será la suma de todos los anchos de las columnas que se ocupan, no solamente la A y la P. En el libro encontrarás un comentario iniciado con EM:
ResponderBorrarEl segundo detalle es que este código (*) contempla el formato normal de la hoja. Si vas a Opciones de Excel, General, verás la fuente predeterminada, y el tamaño en mi caso es de 12. Como aquí aplicas una fuente de 20, lo que me pareció apropiado es sumarle a la variable 'dify', la suma de los intervalos de 12 a 20, o sea 4 más: dify = Round(dif) + 5
Por último no olvidar el zoom que puede cambiar el modo en que se ve el texto en una celda.
Las macros se basan en el formato normal de una hoja. Por eso dejo varias líneas con el texto 'ajustar'. Tendrás que ir viendo en cada modelo cómo aplicar algún ajuste.
Si fuese una Función, habría que pasarle varios argumentos además del alto de fila y ancho de columna, como ser: Tipo y tamaño de la fuente, zoom de la pantalla, alineación, sangría, etc.
Ojalá Excel la incluya en alguna versión o alguien se anime y desarrolle una función para esto ;)