Unpivot de asientos contables: generar contrapartidas cuando las columnas no están en el orden esperado
Esta semana surgió una duda muy práctica en la comunidad, ligada al caso que Nacho resolvió unas semanas atrás sobre desglose de asientos contables con contrapartida automática. La fórmula original funcionaba siempre que las columnas de la tabla estuvieran en el orden previsto, pero si alguien cambia el orden (por ejemplo mueve la columna de importe antes que la de cuenta), la "contrapartida" generada se descompensa.
Juan dio con la clave: dentro del LET, antes de construir la secuencia de asientos negativos, fuerza el orden de columnas con ELEGIRCOLS. De esta forma la lógica de la contrapartida trabaja siempre sobre el layout correcto, sea cual sea el orden en la tabla original.
Fórmula propuesta por Juan:
``
=LET(
_datos; A1:D6;
AJUSTARFILAS(
ENCOL(
APILARH(
_datos;
ELEGIRCOLS(_datos; 1);
SECUENCIA(FILAS(_datos); ; 572; 0);
ELEGIRCOLS(_datos; 3);
TOMAR(_datos; ; -1) * -1
)
);
4
)
)
`
Nacho confirmó el enfoque: no se trata solo de elegir qué columnas tomar, sino de reordenarlas dentro del APILARH para que la generación de la contrapartida quede blindada frente a cambios en la tabla.
Un recordatorio útil de que ELEGIRCOLS` no sirve únicamente para seleccionar, también para reubicar.
El problema: una contrapartida que se descuadra al mover columnas
Semanas atrás, en la comunidad se resolvió cómo desglosar asientos contables generando automáticamente su contrapartida (el asiento en negativo que equilibra cada apunte). La fórmula funcionaba de maravilla... siempre que las columnas de la tabla estuvieran en el orden previsto.
El problema llegó después: si alguien reordena la tabla —por ejemplo, mueve la columna de importe antes que la de cuenta— la contrapartida generada se descompensa. La fórmula sigue "funcionando", pero produce resultados incorrectos porque asume posiciones de columna que ya no son las que cree.
Es un fallo silencioso y peligroso: no da error, simplemente cuadra mal.
La clave de Juan: forzar el orden con ELEGIRCOLS
Juan dio con la solución elegante. Dentro del LET, antes de construir la secuencia de asientos negativos, fuerza el orden de las columnas con ELEGIRCOLS. Así la lógica de la contrapartida trabaja siempre sobre el layout correcto, sea cual sea el orden real de la tabla de origen.
=LET(
_datos; A1:D6;
AJUSTARFILAS(
ENCOL(
APILARH(
_datos;
ELEGIRCOLS(_datos; 1);
SECUENCIA(FILAS(_datos); ; 572; 0);
ELEGIRCOLS(_datos; 3);
TOMAR(_datos; ; -1) * -1
)
);
4
)
)Cómo funciona
Vamos por partes:
_datosguarda el rango de la tabla original, para no repetirlo.- El
APILARHconstruye el bloque de la contrapartida columna a columna, eligiendo explícitamente qué va en cada posición: la primera columna conELEGIRCOLS(_datos; 1), un número de asiento generado conSECUENCIA, la tercera columna conELEGIRCOLS(_datos; 3), y el importe invertido conTOMAR(_datos; ; -1) * -1. - Al reconstruir el orden a mano dentro del
APILARH, la fórmula deja de depender de cómo estén colocadas las columnas en la tabla de entrada. ENCOLyAJUSTARFILAS(...; 4)reorganizan el resultado en un bloque de 4 columnas, que es la forma final del asiento.
El truco de SECUENCIA(FILAS(_datos); ; 572; 0) genera una columna con un valor constante (aquí, 572) repetido en todas las filas, útil como identificador o marca del asiento generado.
La lección: ELEGIRCOLS no solo selecciona, también reordena
Nacho confirmó el enfoque con un matiz importante: no se trata solo de elegir qué columnas tomar, sino de reubicarlas dentro del APILARH para blindar la generación frente a cambios en la tabla.
Ese es el aprendizaje que trasciende este caso concreto: ELEGIRCOLS(rango; {3; 1; 2}) no se limita a filtrar columnas, también las coloca en el orden que le pidas. Es una forma sencilla de normalizar el layout de una tabla antes de operar con ella, y de protegerte de que un compañero mueva una columna y te rompa el modelo sin que te enteres.
Funciones clave
ELEGIRCOLS: selecciona y reordena columnas de un rango.APILARH: ensambla columnas en horizontal para construir el bloque de contrapartida.TOMAR(...; ; -1): coge la última columna (el importe) para invertirlo.SECUENCIA: genera el identificador del asiento.ENCOLyAJUSTARFILAS: dan al resultado su forma final.
Conclusión
Si tienes fórmulas que dependen de la posición de las columnas, un simple reordenamiento puede descuadrarlas sin previo aviso. Normalizar el orden con ELEGIRCOLS antes de operar es un seguro barato y efectivo. Casos contables tan finos como este se resuelven cada semana en la comunidad de InflueXcel.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Cruzar albaranes entre hojas con AJUSTARFILAS y BUSCARX CasoUn miembro de la comunidad tiene números de albarán en una hoja y, en otra hoja, varias columnas con pares albarán-importe (distribuidos hor
- Apilar pares de columnas dinámicamente: 5 enfoques CasoHugo tiene un rango con pares de columnas (A-B, C-D, E-F, G-H, I-J) y necesita apilarlos todos en una matriz de 2 columnas. La solución manu
- Funciones personalizadas en Excel: LET, LAMBDA y recursividad TutorialCómo pasar de una fórmula escrita a mano a una función propia que puedes llamar por su nombre en cualquier libro. Los tres vídeos de esta pá
- Reestructurar datos apilados con LAMBDA y PIVOTARPOR CasoUn miembro de la comunidad comparte un archivo de revisión de Seguridad Social con una tabla amplia (34 columnas x 1540 filas) en formato "a
- Agrupar y sumar columnas específicas con AGRUPARPOR y ELEGIRCOLS CasoUn miembro de la comunidad necesita agrupar datos de una hoja de seguimiento y sumar solo determinadas columnas, sin incluir todas las del r
- Eliminar valores de una matriz dinámica con tabla de exclusiones y REDUCE CasoJuan tiene una matriz generada con fórmulas de desbordamiento y necesita eliminar ciertos textos (nombres de áreas geográficas como "Área me
- SUMAR.SI.CONJUNTO en Excel: las 5 dudas más buscadas, resueltas (y por qué no acepta ELEGIRCOLS) TutorialLe pregunté a Copilot cuáles son las 5 dudas que más se buscan sobre la función SUMAR.SI.CONJUNTO y las resuelvo una a una en Excel, cada un
- CONTAR.SI no acepta ELEGIRCOLS: por qué las funciones .SI exigen una referencia y no una matriz CasoHay errores de Excel que te mandan a buscar en la dirección equivocada, y este es de manual. Joan Recasens llega al grupo con una fórmula qu
- Eliminar filas en blanco de una tabla con FILTRAR y BYROW CasoÓscar plantea una duda práctica: tiene una tabla en Excel con filas que contienen información y otras vacías, y necesita extraer solo las fi
- Colorear la fila entera según el técnico asignado: la referencia mixta que casi nadie aplica bien CasoEsta semana surgió una duda que parece de principiante y en realidad esconde el concepto peor entendido del formato condicional. Johann Frar