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:

  • _datos guarda el rango de la tabla original, para no repetirlo.
  • El APILARH construye el bloque de la contrapartida columna a columna, eligiendo explícitamente qué va en cada posición: la primera columna con ELEGIRCOLS(_datos; 1), un número de asiento generado con SECUENCIA, la tercera columna con ELEGIRCOLS(_datos; 3), y el importe invertido con TOMAR(_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.
  • ENCOL y AJUSTARFILAS(...; 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.
  • ENCOL y AJUSTARFILAS: 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