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
- Identificar proveedor en asientos contables con BUSCARX y BYROW CasoJuan comparte en el grupo una fórmula de John Vergara que le ha "salvado la vida laboral" para un problema clásico de contabilidad: en un di
- Cómo dejar una celda realmente vacía en fórmulas SI, BUSCARX y FILTRAR CasoInteresante problema planteado por un miembro de la comunidad: quiere que sus fórmulas devuelvan una celda realmente vacía cuando no hay res
- Buscar todos los valores coincidentes cuando BUSCARX solo devuelve uno CasoJuan se encuentra con un problema frecuente: tiene una tabla de búsqueda con claves duplicadas (A aparece varias veces con valores distintos
- Buscar múltiples palabras simultáneamente con FILTRAR y BYROW CasoJuan consigue filtrar una tabla buscando una palabra con HALLAR, pero cuando intenta buscar dos palabras a la vez pasando un rango (K16:L16)
- Encontrar en qué columna está el máximo: BYCOL + BUSCARX vs TOMAR + SI CasoA partir de una tabla de datos donde cada fila tiene valores distribuidos en varias columnas con cabeceras compuestas (ej: "Madrid - Ventas"
- Filtrar filas con todos los valores a cero: 4 enfoques con FILTRAR y BYROW CasoJuan tiene una tabla grande donde muchas filas contienen solo ceros y necesita filtrarlas para quedarse solo con las que tienen datos reales
- BUSCARX explicado fácil TutorialDesde la sintaxis básica hasta trucos avanzados como expresiones regulares y cruce de rangos. Además, aprenderás a manejar errores y a usar
- ¿MAP o BYROW? Descubre cuándo usar cada una Tutorial¿MAP o BYROW? Descubre cuándo usar cada una y cómo estas funciones pueden transformar tu forma de trabajar en Excel. En este vídeo aprenderá
- Saber en qué rango cayó el valor encontrado, no solo su valor CasoEsta semana surgió una duda que parece sencilla hasta que te pones: Juan tiene una base de datos larga y, tras localizar un valor con ÍNDICE
- BUSCARX con múltiples columnas: por qué no funciona y 4 alternativas CasoJuan plantea una duda que muchos han tenido alguna vez: quiere que BUSCARX le devuelva varias columnas a la vez (nombre y apellidos), pero l