Consolidar bloques de datos con cabeceras en una sola tabla

Un miembro de la comunidad comparte un archivo con datos de carteras de cobro organizados en bloques separados. Cada bloque tiene una cabecera con el tipo de cartera (CARTERA_AL_DIA, CARTERA_[01-30], etc.) y debajo una tabla con empresas y sus porcentajes de mora y deuda contable.

El objetivo: unificar todos los bloques en una sola tabla de 3 columnas, concatenando el nombre de la empresa con el tipo de cartera (ej: MANZANA_CARTERA_AL_DIA) y manteniendo los porcentajes asociados.

La estructura original tiene este aspecto:

``
CARTERA_AGRUPADA CARTERA_AL_DIA
EMPRESA %MORA %CONTABLE
MANZANA 0,01 0,02
PERA 0,03 0,04

CARTERA_AGRUPADA CARTERA_[01-30]
EMPRESA %MORA %CONTABLE
DURAZNO 0,05 0,06
MELON 0,07 0,08
SANDIA 0,09 0,10
`

Y el resultado esperado:

`
MANZANA_CARTERA_AL_DIA 0,01 0,02
PERA_CARTERA_AL_DIA 0,03 0,04
DURAZNO_CARTERA_[01-30] 0,05 0,06
MELON_CARTERA_[01-30] 0,07 0,08
SANDIA_CARTERA_[01-30] 0,09 0,10
`

John propuso una primera aproximación directa con APILARV y APILARH, apilando cada bloque manualmente:

`
=APILARV(
APILARH(B5:B6&"_"&C2; H5:I6);
APILARH(B13:B15&"_"&C10; H13:I15)
)
`

Simple y funcional, aunque requiere ajustar los rangos manualmente si se añaden más bloques.

Para hacerlo completamente dinámico, John aportó una segunda solución con LET, FILTRAR, APILARH y BUSCAR:

`
=LET(
e; B2:B15;
f; FILA(e);
FILTRAR(
APILARH(
e&"_"&BUSCAR(f; f/(e=B2); C2:C15);
H2:I15
);
H2:H15<""
)
)
`

El truco está en BUSCAR(f; f/(e=B2); C2:C15): busca hacia atrás la última cabecera de cartera para cada fila, asignando automáticamente el tipo correcto a cada empresa. Luego FILTRAR elimina las filas sin datos.

Gerson aportó una tercera versión usando SCAN y REGEXPRUEBA para detectar las cabeceras de forma automática:

`
=FILTRAR(
APILARH(
B2:B15&"_"&SCAN(; C2:C15; LAMBDA(a; v; SI(REGEXPRUEBA(v; "_"); v; a)));
H2:I15
);
N(+I2:I15)
)
`

Aquí SCAN recorre la columna C y, cada vez que encuentra un valor con guion bajo (patrón de cabecera), lo guarda como referencia. Para las filas de datos, mantiene la última cabecera encontrada. REGEXPRUEBA` identifica las cabeceras por el patrón del nombre de cartera.

Tres enfoques para el mismo problema: desde lo manual y directo hasta lo completamente dinámico con detección automática de cabeceras.

Más contenido de Excel en InflueXcel