miércoles, 23 de febrero de 2022

53 - Autoajuste de filas en celdas combinadas

 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.


Como se trata de un evento de hoja se colocará en el Editor, en el objeto HOJA donde tengamos nuestra tabla de datos.

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.



          Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.MergeCells = False Then Exit Sub  'si la celda seleccionada no está combinada se cancela
canti = Target.Count                        'cant de col del rango seleccionado
colx = Target.Column                        'primera col del target

'obtener el ancho total de las col combinadas, por ej: J:L
    For a = colx To colx + canti - 1
        anchocol = anchocol + Cells(1, a).ColumnWidth
    Next a

x = Range("A1").CurrentRegion.Rows.Count    'total de filas de la tabla
alto = 15                                   'alto normal de la fila

'se recorren todas las filas ocupadas a partir de la fila 4....AJUSTAR
For i = 4 To x
    resulta = 0
    'se evalúa cuántos saltos de renglón existen en texto
    Set D = Cells(i, colx)
    anchotexto = Len(D)                     'ancho de cada col
    If anchotexto > anchocol Then
        'calculo
        dif = (anchotexto - anchocol) / anchocol
        If dif <= 1.5 Then                     'si son muchas col probar con <= 1
            If dif <= 0.4 Then                 'ajustar según el tamaño de la fuente
                resulta = 1
            Else
                resulta = 2
            End If
        Else
            resulta = dif + 2
        End If
        'se asigna el alto obtenido
        If resulta > 0 Then
            Range("A" & i).RowHeight = (alto * resulta)
            'si las celdas aún no tienen ajuste de texto, se agrega ahora
            With Cells(i, colx)
                .HorizontalAlignment = xlLeft
                .VerticalAlignment = xlCenter
                .WrapText = True
            End With
         End If
    End If
Next i

[A4].Select      'AJUSTAR
End Sub

 

El libro con el primer ejemplo puede descargarse desde aquí

Ver VIDEO 53 desde aquí.