Filtrado inteligente de asientos contables con BUSCARX y BYROW

Nuevo caso de contabilidad en la comunidad: dado un listado de asientos con múltiples cuentas (gastos 6xx/7xx e IVA 4xx), se necesita extraer automáticamente la descripción de la contrapartida (cuentas 400, 410 o 430) para cada línea de gasto. El problema es complejo porque cada asiento tiene varias líneas y hay que cruzar datos entre ellas.

John aporta una fórmula elegante que combina BYROW con BUSCARX:

``
=SI(BYROW(--IZQUIERDA(E2:E11)={6\7};O);BUSCARX(B2:B11;B2:B11/BYROW(--IZQUIERDA(E2:E11;3)={400\410\430};O);F2:F11);"")
`

La fórmula tiene dos partes brillantes. Primero, BYROW(--IZQUIERDA(E2:E11)={6\7};O) identifica las filas cuya cuenta empieza por 6 o 7 (gastos/ingresos) usando comparación perpendicular. Segundo, BUSCARX cruza el número de asiento para encontrar la descripción de la contrapartida: divide B2:B11 entre el resultado de BYROW(--IZQUIERDA(E2:E11;3)={400\410\430};O), lo que provoca #DIV/0! en las filas que no son proveedor. BUSCARX salta los errores y solo encuentra coincidencia en las filas de proveedor del mismo asiento.

Miki propone un enfoque alternativo agrupando por asiento y cuenta, usando MATRIZATEXTO para filtrar los primeros 3 dígitos de las cuentas (400, 410, 430).

La comunidad destacó este caso como material para la "influcharla" por la elegancia de las soluciones.

Funciones utilizadas: BUSCARX, BYROW, IZQUIERDA, SI, O, MATRIZATEXTO, FILTRAR`.

El problema: traer la contrapartida a cada línea de gasto

Un caso de contabilidad de los que gustan en la comunidad. Tenemos un listado de asientos donde conviven cuentas de gasto e ingreso (las que empiezan por 6 o 7) con cuentas de contrapartida e IVA (las 400, 410 o 430). Cada asiento tiene varias líneas, y el objetivo es que, para cada línea de gasto, aparezca automáticamente la descripción de su contrapartida (el proveedor o acreedor de ese mismo asiento). La dificultad: hay que cruzar datos entre filas del propio listado, no contra una tabla externa.

La solución de John: BYROW + BUSCARX con un truco de errores

John lo resolvió con una fórmula que combina BYROW para clasificar las filas y BUSCARX para cruzar dentro del mismo asiento. Tiene dos partes brillantes.

Primera parte: identificar las líneas de gasto. Se toma la primera cifra de la cuenta con IZQUIERDA y se comprueba si es 6 o 7. Comparar una columna de iniciales contra el conjunto de valores 6 y 7 genera, por cada fila, una pareja de VERDADERO/FALSO; BYROW con la función O colapsa esa pareja a un único VERDADERO si la cuenta empieza por cualquiera de los dos. En vez de la doble negación clásica para pasar de booleano a número, se puede envolver la comparación en N(...), que coacciona VERDADERO/FALSO a 1/0 de forma explícita y legible.

Segunda parte: encontrar la contrapartida sin tabla auxiliar. Aquí está la joya. Se quiere localizar, dentro del listado, la fila del mismo asiento cuya cuenta empieza por 400, 410 o 430. El truco es dividir el número de asiento por un indicador 1/0 que vale 1 solo en las filas de contrapartida:

=BUSCARX(asiento; asiento / es_contrapartida; descripcion; "")

Donde es_contrapartida es un vector de unos y ceros (calculado igual que antes, comparando la inicial de la cuenta con 400, 410 y 430 y colapsando con BYROW + O). Al dividir, las filas que no son contrapartida se convierten en #DIV/0!, y BUSCARX simplemente salta los errores y solo encuentra coincidencia en la fila de proveedor del mismo asiento. Un SI final deja en blanco las filas que no son de gasto.

Es un uso muy elegante de la división por cero: en lugar de filtrar, "envenenamos" las filas que no queremos para que la búsqueda las ignore sola.

La alternativa de Miki

Miki propuso otro camino: agrupar por asiento y cuenta, usando MATRIZATEXTO para quedarse con los tres primeros dígitos de cada cuenta y así aislar las 400, 410 y 430. Es un enfoque más "de agrupación" frente al de "búsqueda con errores" de John, y llega al mismo destino por otra ruta.

La comunidad marcó este caso como material de "influcharla" precisamente por la elegancia de las dos soluciones.

Funciones clave

  • BYROW + O: clasifican cada fila (¿es gasto?, ¿es contrapartida?) colapsando la comparación a un único indicador.
  • IZQUIERDA: extrae la primera cifra de la cuenta para clasificarla.
  • N: convierte los booleanos a 1/0 sin recurrir a la doble negación.
  • BUSCARX: cruza el número de asiento, aprovechando que ignora los errores de la columna de búsqueda.

Conclusión

Este caso enseña dos ideas que valen para mil situaciones: clasificar filas con BYROW + O, y forzar a BUSCARX a mirar solo donde te interesa inyectando errores con una división por cero. Cruzar datos dentro de un mismo listado, sin tablas auxiliares ni columnas de apoyo, es exactamente el tipo de reto que se cuece cada semana en la comunidad de InflueXcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel