Reclasificación contable: duplicar cada fila con una conversión distinta por columna, en un único bloque
Interesante reto contable planteado esta semana por un miembro de la comunidad. Juan parte de una tabla de apuntes contables (rango C7:P10) y necesita que, por cada fila original, se generen dos filas en un único bloque dinámico: la original y su reclasificación. En la fila reclasificada algunas columnas se intercambian (donde ponía "sga" pasa a "pendiente imputar" y al revés), se fija una cuenta contable concreta y el importe se invierte de signo. Lo tenía resuelto creando un rango por cada cambio, pero buscaba una sola fórmula escalable.
La comunidad propuso tres caminos distintos para el mismo resultado.
Versión base con APILARH y vector de signos
``
=LET(
_rango; C7:P10;
AJUSTARFILAS(
ENCOL(
APILARH(
_rango;
SI.ERROR(_rango{1\1\1\1\1\1\1\1\1\1\-1\1\1\1}; _rango)
)
);
14
)
)
`
Apila el rango original junto a una copia multiplicada por un vector donde 1 mantiene el valor y -1 invierte el signo (la columna del importe). SI.ERROR deja intacto el texto que no se puede multiplicar. Después, APILARH + ENCOL + AJUSTARFILAS(...;14) reconstruye el bloque intercalando original y reclasificación.
Versión configurable columna a columna
Para no tener que tocar la fórmula cada vez, un vector _conv decide qué hace cada columna: 1 mantiene el valor, -1 lo invierte, y un texto entre comillas fija un valor (una etiqueta o una cuenta como 70000000).
`
=LET(
_rango; C7:P10;
_conv; {1\"Reclasificar"\1\"Reclasificar"\1\"Reclasificar"\"70000000"\1\1\1\-1\1\1\1};
AJUSTARFILAS(
ENCOL(
APILARH(
_rango;
SI(ESTEXTO(_conv); _conv; SI.ERROR(_rango_conv; _rango))
)
);
14
)
)
`
La clave es ESTEXTO(_conv): distingue las columnas que se fijan con un texto de las que se calculan numéricamente. Así el comportamiento de cada columna se controla solo editando el vector, sin tocar la estructura.
Enfoque con SECUENCIA e INDICE
John planteó una alternativa que construye directamente las 14 columnas del resultado, posicionando cada celda con INDICE y usando la paridad de la fila (ES.PAR) para decidir si toca el original o la reclasificación:
`
=LET(d;C7:P10;t;SECUENCIA(2FILAS(d));s;SECUENCIA(;14);n;INDICE(d;ENTERO((t+1)/2);s+4(s=2)-4(s=6));SI(ES.PAR(t);SI((s<7)ES.PAR(s);"Reclasificacion";SI(s=11;-n;n));n))
`
Tres caminos para el mismo objetivo: uno directo con vector de signos, otro totalmente configurable por columna, y otro que reconstruye la rejilla con SECUENCIA e INDICE`. El fichero adjunto incluye el planteamiento original y el libro con las soluciones.
El reto
Juan trae a la comunidad un caso contable muy habitual: parte de una tabla de apuntes (rango C7:P10) y necesita que, por cada fila original, aparezcan dos filas en un único bloque dinámico: la original y su reclasificación. En la fila reclasificada algunas columnas se intercambian, se fija una cuenta contable concreta y el importe cambia de signo. Lo tenía resuelto creando un rango por cada cambio, pero buscaba una sola fórmula que escalara sola.
La comunidad propuso tres caminos distintos para el mismo resultado.
Enfoque 1: apilar y aplicar un vector de signos
La primera idea apila el rango original junto a una copia suya. Esa copia se multiplica por un vector de constantes con una posición por columna: donde vale uno el valor se mantiene, y en la columna del importe vale menos uno para invertir el signo. Como el texto no se puede multiplicar, se envuelve en SI.ERROR para que las etiquetas queden intactas.
Después, APILARH pega original y copia lado a lado, ENCOL lo convierte en una sola columna y AJUSTARFILAS(...;14) reconstruye el bloque de 14 columnas intercalando cada fila con su reclasificación. Toda la lógica vive dentro de un LET que nombra el rango una sola vez.
Enfoque 2: configurable columna a columna
Multiplicar por signos funciona, pero obliga a tocar la fórmula si cambian las reglas. La segunda versión usa un vector de configuración donde cada columna declara qué hacer: mantener el valor, invertir el signo, o fijar un texto (una etiqueta como "Reclasificar" o una cuenta como 70000000).
La pieza clave es ESTEXTO: distingue las columnas que se fijan con un texto de las que se calculan como número. Así el comportamiento de cada columna se controla solo editando el vector, sin cambiar la estructura de la fórmula. Es la versión que mejor escala cuando el criterio contable evoluciona.
Enfoque 3: reconstruir la rejilla con SECUENCIA e INDICE
John propone algo distinto: en lugar de apilar, construye directamente las 14 columnas del resultado. Genera las filas con SECUENCIA, posiciona cada celda con INDICE, y usa la paridad de la fila (ES.PAR) para decidir si toca mostrar el dato original o el reclasificado. Un mismo INDICE recoloca las columnas que se intercambian aplicando un desplazamiento según la posición.
Funciones clave
LET: nombra el rango y los pasos intermedios para leer la fórmula de un vistazo.APILARHyAPILARV: unen matrices en horizontal y en vertical.ENCOL: aplana una matriz a una sola columna.AJUSTARFILAS: repliega esa columna en un bloque con el número de columnas deseado.SI.ERRORyESTEXTO: separan lo que es texto de lo que es número, la base para tratar cada columna de forma distinta.SECUENCIA,INDICEyES.PAR: permiten construir la rejilla posición a posición.
Conclusión
El mismo objetivo —duplicar cada fila con una conversión distinta por columna, en un único bloque dinámico— admite tres filosofías: multiplicar por un vector de signos, declarar la conversión columna a columna, o reconstruir la rejilla desde cero. La segunda es la más mantenible; la tercera, la más didáctica para entender cómo se coloca cada celda. Casos como este surgen cada semana en la comunidad de Influexcel, donde un problema real acaba teniendo tres soluciones elegantes. El fichero adjunto incluye el planteamiento y el libro con las soluciones.
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
- Crear una tabla automáticamente cuando no sabes cuántas filas vienen (Office Scripts) CasoUn miembro de la comunidad llegó con un reto poco habitual: necesitaba un script para Excel en la web que convirtiera un rango en tabla sin