Unpivot con separación de cuentas contables concatenadas
Interesante problema planteado por Juan en el grupo: tiene una tabla de asientos contables donde las cuentas vienen concatenadas con "/" en una sola celda (por ejemplo, 621/472/410), y cada cuenta tiene su importe asociado en columnas separadas. El reto es hacer un unpivot que no solo despliegue los importes, sino que también separe las cuentas individuales y las asocie correctamente.
Los datos de partida tienen esta estructura:
| Fecha | Cuentas | Importe 1 | Importe 2 | Importe 3 | Concepto |
|-------|---------|-----------|-----------|-----------|----------|
| 2026-03-31 | 621/472/410 | 100 | 21 | -410 | Inventado |
| 2026-04-30 | 623/472/410 | 3000 | 21 | -3021 | Prueba |
Y el resultado esperado es una fila por cada cuenta individual con su importe correspondiente:
| Fecha | Cuenta | Importe | Valor | Concepto |
|-------|--------|---------|-------|----------|
| 2026-03-31 | 621 | Importe | 100 | Inventado |
| 2026-03-31 | 472 | Importe | 21 | Inventado |
| 2026-03-31 | 410 | Importe | -410 | Inventado |
| 2026-04-30 | 623 | Importe | 3000 | Prueba |
| ... | ... | ... | ... | ... |
Juan ya tenía un LAMBDA heredado de otro ejercicio que casi lo resolvía, pero la columna de cuentas se repetía en vez de dividirse. La comunidad propuso tres enfoques distintos:
Solución de Nacho usando LET con un LAMBDA auxiliar para vectorizar la operación de columnas:
``
=LET(
H; APILARH;
F; LAMBDA(x; ENCOL(SI(F5:H6 = ""; ""; x); 2));
APILARV(
H(
F(D5:D6);
H(
EXCLUIR(ENCOL(DIVIDIRTEXTO(CONCAT(E5:E6 & "/"); "/")); -1);
F(F4:H4);
F(F5:H6);
F(I5:I6)
)
)
)
)
`
La clave está en usar CONCAT + DIVIDIRTEXTO para unir todas las cuentas y luego separarlas de golpe, mientras ENCOL con el parámetro de agrupación (2) reorganiza cada columna en bloques de 3 filas.
Solución con REDUCE y EXPANDIR que usa un enfoque más funcional, construyendo el resultado fila a fila:
`
=LET(
_f; D5:D6;
_c; E5:E6;
_t; I5:I6;
_d; F5:H6;
_R; LAMBDA(x; EXCLUIR(REDUCE(0; x; LAMBDA(a; v; APILARV(a; EXPANDIR(v; 3;; v)))); 1));
APILARH(
_R(_f);
EXCLUIR(REDUCE(0; _c; LAMBDA(a; v; APILARV(a; ENCOL(--DIVIDIRTEXTO(v; "/"))))); 1);
_R(EXPANDIR(F4; FILAS(D5:D6);; F4));
EXCLUIR(REDUCE(0; _d; LAMBDA(a; v; APILARV(a; v))); 1);
_R(_t)
)
)
`
Aquí, el LAMBDA _R se encarga de repetir cada valor tantas veces como cuentas hay (3 en este caso) usando EXPANDIR, y REDUCE va apilando cada bloque verticalmente.
Solución de Gerson, la más compacta, con un truco elegante: usar CONCAT con doble separador ("/" y "|") para aplanar todo en un solo paso:
`
=LET(
a; --DIVIDIRTEXTO(CONCAT(E5:E6 & "|"); "/"; "|"; 1);
F; LAMBDA(x; ENCOL(SI(a; x)));
APILARH(F(D5:D6); F(a); F(F4); F(F5:H6); F(I5:I6))
)
`
El DIVIDIRTEXTO con dos delimitadores ("/" para las cuentas y "|" para separar filas) genera directamente una matriz con la forma correcta, que luego sirve como máscara booleana para ENCOL`.
Miki también aportó su versión con una imagen que completaba el enfoque.
Las reacciones de Juan lo dicen todo: "Solución Increíble", "Perfecta", "Buenísima también".
Más contenido de Excel en InflueXcel
- Cuenta clientes y cervezas en Excel 🍺 Caso "La Taberna: El Poney Pisador" (Nivel 1) Tutorial🍺 Noche cerrada en Bree. Frodo, Sam, Merry y Pippin cruzan la puerta de El Poney Pisador huyendo de los Jinetes Negros: la sala está a reven
- SUMAR.SI.CONJUNTO en acción con El Señor de los Anillos 🃏 El 21 de La Comarca TutorialLo que practicamos en este caso: • Contar cartas por palo con CONTAR.SI • Sumar valores con condiciones (SUMAR.SI / SUMAR.SI.CONJUNTO) • Apl
- Reto de Excel: El cumpleaños de Bilbo 🎂 | CONTAR.SI y SUMAR.SI desde cero (Nivel 1) TutorialEn La Comarca se celebra el cumpleaños número 111 de Bilbo Bolsón: cerveza, pasteles, fuegos artificiales… y algún curioso escondido tras el
- ¡Excel PowerQuery Hack! Conexiones con rutas relativas en 10 minutos! Tutorial¿Harto de ajustar las conexiones en PowerQuery cada vez que compartes tu archivo de Excel? 🙄 Convierte las conexiones de PowerQuery con ruta
- Mejora un 90% el rendimiento de Power Query con SQLite TutorialPower Query es una herramienta potente para consolidar, combinar y calcular datos, pero cuando trabajamos con millones de registros y calcul
- Reorganizar tablas mensuales: cruzar por persona buscando en vertical y en horizontal CasoNuevo caso interesante de la comunidad. Juan tenía varias tablas mensuales (a veces más de una en el mismo mes) y quería reorganizarlas por
- Un dato de todas las hojas, escrito una sola vez CasoEsta semana surgió en la comunidad un reto muy habitual cuando un libro tiene muchas hojas: mostrar el valor de la celda B3 de cada hoja, in
- Un índice de hojas que se genera solo: HYPERLINK en rangos desbordados CasoEsta semana surgió en la comunidad un pequeño "expediente X". Un miembro llegó tras ver un vídeo con una idea clara en la cabeza: montar una
- Reformatear un código alfanumérico al teclear: de NN1234567 a NN-12345-67 CasoEsta semana surgió en la comunidad una duda muy práctica: cómo conseguir que al escribir un código tipo NN1234567 (dos letras seguidas de si
- Reclasificación contable: duplicar cada fila con una conversión distinta por columna, en un único bloque CasoInteresante reto contable planteado esta semana por un miembro de la comunidad. Juan parte de una tabla de apuntes contables (rango C7:P10)