Agrupar filas repetidas y colocar encabezado en cada grupo

Tengo una tabla de 5 columnas y datos repetidos (Entidad) deseo agruparlos y a cada grupo poner la cabecera .

 Y deseo agruparlos del siguiente modo pero con macros vba

1 respuesta

Respuesta
1

.20/10/16

Espero haberte entendido correctamente.

En tal caso, activa el editor de Visual Basic (atajo: Alt+F11), inserta un nuevo módulo ("Insertar", "Módulo") y pega el siguiente código:

Sub InsTit()
'---- Variables modificables ----
'=== WIDMAN, modifica estos datos de acuerdo a tu proyecto:
CeldaIniTit = "C1" 'celda donde empiezan los títulos/encabezados de la columna clave (ENTIDAD)
'---- fin Variables
'
'---- inicio de rutina:
'  
Set RangTit = Range(CeldaIniTit, Range(CeldaIniTit).Offset(0, Range(CeldaIniTit).CurrentRegion.Columns.Count - 1))
UltFila = RangTit.CurrentRegion.Rows.Count
Range(CeldaIniTit).Select
'Rutina de insertar filas en blanco:
For FilaAct = 2 To UltFila
    KEYsep = Range(CeldaIniTit).Offset(FilaAct - 1)
    If Range(CeldaIniTit).Offset(FilaAct) <> KEYsep Then
        Range(CeldaIniTit).Offset(FilaAct).EntireRow.Insert xlDown
        Range(CeldaIniTit).Offset(FilaAct).EntireRow.Insert xlDown
        RangTit.Copy Range(CeldaIniTit).Offset(FilaAct + 1)
        UltFila = UltFila + 2
        FilaAct = FilaAct + 2
    End If
Next
Set RangTit = Nothing
End Sub

Bien, verás que sólo debes indicar cuál es la celda donde inicia la columna clave donde está el criterio para separar la base (ENTIDAD, en este caso)

Supuesto que la base estuviera ordenada ya por tal columna, la rutina luego se encarga de hacer las separaciones que solicitabas en tu pregunta.

A fin de evitar problemas, te sugiero que pruebes la rutina en una copia de tu hoja y veas si funcionó como esperabas.

En tal caso, espero tu devolución y la calificación que creas merece mi respuesta.

Si no, antes de valuarla, comentame qué inconveniente encontraste.

Un abrazo

Fernando

(Buenos Aires, Argentina)

.

Estimado Fernando

Al ejecutar esta macro soluciona parcialmente el problema, observe que no copia la cabecera completa de la tabla omite HORA, CÓDIGO y otra es la variable UltFila toma un valor fijo de la tabla inicial que al sumarle las filas vacías y la cabecera se incrementa el total de registros y ya no son considerados para los siguientes registros y agruparlos y colocarles las cabeceras.

Como podría hacer que la variable UltFila se actualice?

Gracias por el interés y tus aportes.

Widman

Lima, Peru

.

Buenas, Widman

Disculpa la demora pero estoy de vacaciones y lejos de las computadoras.

Pero me hice un tiempo para revisar este caso. Efectivamente, faltaron algunos controles.

Por favor, sustituye el código anterior por el siguiente:

Sub InsTit()
'---- Variables modificables ----
'=== WIDMAN, modifica estos datos de acuerdo a tu proyecto:
CeldaIniTit = "C1" 'celda donde empiezan los títulos/encabezados de la columna clave (ENTIDAD)
'---- fin Variables
'
'---- inicio de rutina:
'  
Set RangTit = Range(CeldaIniTit).EntireRow
UltFila = Range(CeldaIniTit).CurrentRegion.Rows.Count
Range(CeldaIniTit).Select
FilaAct = Range(CeldaIniTit).Offset(1).Row
Do
    KEYsep = Range(CeldaIniTit).Offset(FilaAct - 1)
    If Range(CeldaIniTit).Offset(FilaAct) <> KEYsep Then
        Range(CeldaIniTit).Offset(FilaAct).EntireRow.Insert xlDown
        Range(CeldaIniTit).Offset(FilaAct).EntireRow.Insert xlDown
        RangTit.Copy Range(CeldaIniTit).Offset(FilaAct + 1).EntireRow
        UltFila = UltFila + 2
        FilaAct = FilaAct + 2
    End If
    FilaAct = FilaAct + 1
Loop While FilaAct < UltFila
Set RangTit = Nothing
End Sub

Pruébalo y coméntame si está OK.

Un abrazo

Fer

.

Estimado Fernando,

En realidad no se resolvió la consulta inicial, pero por un cambio de requerimiento este módulo actualmente está excelente y muy preciso. Solo toma registro por registro y le coloca la cabecera.

Le agregue una macro para ordenar la tabla inicial,  colorear y ponerle negrita a la cabecera pero ahora me queda abuzar de tus conocimientos y solicitarte como ponerle los bordes de cada registro con su cabecera.

Te agradezco de antemano.

Saludos.

Widman

.

Buenas tardes, Widman

En el mensaje de mi perfil había colocado que estaría de vacaciones hasta hoy, de allí la demora.

Aquí va la misma rutina anterior a la cual agregué una instrucción para que ordene la base en función de la columna clave.

En mi primera respuesta te escribí:

Supuesto que la base estuviera ordenada ya por tal columna, la rutina luego se encarga de hacer las separaciones que solicitabas en tu pregunta

Pero ahora sólo debes indicarle en la rutina qué celda es la que debe tomar como inicio de títulos y cuál es la de la columna a ordernar.

Luego insertará las filas y copiará la primera fila de títulos como la que tengas en tu planilla.

Es decir que bastará darle el formato que quieras a esa primera fila y la misma se replicará en cada grupo.

Reemplaza, entonces, la rutina anterior por esta:

Sub InsTit()
'---- Variables modificables ----
'=== WIDMAN, modifica estos datos de acuerdo a tu proyecto:
CeldaIniTit = "A1" 'celda donde empiezan los títulos
ClaveEn = "C1" 'Celda de encabezados de la columna clave (ENTIDAD)
'---- fin Variables
'
'---- inicio de rutina:
'  
Set RangTit = Range(CeldaIniTit, Range(CeldaIniTit).Offset(0, Range(CeldaIniTit).CurrentRegion.Columns.Count - 1))
UltFila = RangTit.CurrentRegion.Rows.Count
Range(CeldaIniTit).Select
' ordenamiento previo de la base:  
RangTit.CurrentRegion.Sort Key1:=Range(ClaveEn), Order1:=xlAscending, Header:=xlYes
Application.ScreenUpdating = False
'Rutina de insertar filas en blanco:  
For FilaAct = UltFila - 1 To 2 Step -1
    KEYsep = Range(ClaveEn).Offset(FilaAct - 1)
        If Range(ClaveEn).Offset(FilaAct).Value <> KEYsep Then
        Range(CeldaIniTit).Offset(FilaAct).EntireRow.Insert xlDown
        Range(CeldaIniTit).Offset(FilaAct).EntireRow.Insert xlDown
        RangTit.Copy Range(CeldaIniTit).Offset(FilaAct + 1)
    End If
Next
Set RangTit = Nothing
End Sub

Luego me dirás si anduvo como esperabas.

Un abrazo
Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas