Identificar proveedor en asientos contables con BUSCARX y BYROW

Juan 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 diario contable, cada asiento tiene varias líneas con diferentes cuentas (gastos, IVA, proveedor...), y necesita que en las líneas de gasto aparezca automáticamente el nombre del proveedor o cliente asociado.

El fichero adjunto muestra la estructura: cada asiento (columna B) agrupa varias líneas. Las cuentas que empiezan por 6 o 7 son gastos/ingresos, y las que empiezan por 400, 410 o 430 son proveedores/clientes. El reto es cruzar ambas dentro del mismo asiento.

La fórmula de John resuelve esto en una sola expresión:

``
=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:

Identificar las filas de gasto/ingreso: BYROW(--IZQUIERDA(E2:E11)={6\7};O) extrae el primer dígito de cada cuenta, lo compara con 6 y 7 mediante comparación perpendicular, y O (OR) colapsa: TRUE si la cuenta empieza por 6 o 7.

Buscar el proveedor dentro del mismo asiento: BUSCARX(B2:B11; B2:B11/BYROW(...{400\410\430};O); F2:F11) busca el número de asiento en una versión modificada de sí mismo. El truco está en la división: B2:B11 se divide entre el resultado de BYROW(--IZQUIERDA(E2:E11;3)={400\410\430};O). Las filas que NO son proveedor dan FALSE (0), provocando división por cero (#DIV/0!). BUSCARX salta los errores y solo encuentra coincidencia en las filas de proveedor del mismo asiento.

El fichero incluye también un segundo caso donde las cuentas de pago empiezan por 5 en vez de 6/7, demostrando que la fórmula se adapta fácilmente cambiando los prefijos.

En el grupo se genera un hilo adicional donde Héctor Mendoza replica la fórmula y descubre que el separador de constante matricial horizontal varía según la configuración regional: \ en España, ,` en Latinoamérica. Un detalle que pilla a muchos usuarios al compartir fórmulas entre regiones.

El problema: el proveedor está en otra línea del mismo asiento

Juan compartió en el grupo una fórmula de John Vergara diciendo que le había "salvado la vida laboral". Y cuando ves el problema que resuelve, se entiende la reacción.

En un diario contable, un asiento no es una fila: son varias. Una línea para el gasto, otra para el IVA, otra para el proveedor. Todas comparten el mismo número de asiento, pero el nombre del proveedor solo aparece en su línea. Si quieres analizar los gastos por proveedor, te encuentras con que la línea de gasto no sabe a quién se le compró.

La estructura del fichero es la típica del plan contable español:

  • Las cuentas que empiezan por 6 o 7 son gastos e ingresos.
  • Las que empiezan por 400, 410 o 430 son proveedores y clientes.

El reto: rellenar automáticamente el nombre del proveedor en cada línea de gasto, buscándolo en la línea de proveedor del mismo asiento.

La fórmula de John, en una sola expresión

`` =SI( BYROW(IZQUIERDA(E2:E11)1 = grupoGastos; O); BUSCARX( B2:B11; B2:B11 / BYROW(IZQUIERDA(E2:E11;3)1 = grupoProveedores; O); F2:F11 ); "" ) ``

Donde grupoGastos es una constante matricial horizontal con los valores 6 y 7, y grupoProveedores otra con 400, 410 y 430. En Excel se escriben entre llaves, con el separador de columnas que corresponda a tu configuración regional (más sobre esto al final).

La fórmula tiene dos ideas dentro, y las dos merecen la pena por separado.

Idea 1: comparación perpendicular para "empieza por 6 o por 7"

Mira la primera parte: BYROW(IZQUIERDA(E2:E11)*1 = grupoGastos; O).

IZQUIERDA sin segundo argumento devuelve el primer carácter de cada cuenta, y la multiplicación por 1 lo convierte en número. Eso da una columna de dígitos.

Al compararla con una constante matricial horizontal (los valores 6 y 7 en fila), Excel hace lo que se llama comparación perpendicular: cruza la columna con la fila y genera una matriz de dos columnas. La primera dice si cada cuenta empieza por 6; la segunda, si empieza por 7.

Ahí entra BYROW con la función O: recorre esa matriz fila a fila y colapsa cada par a un único valor lógico. Verdadero si alguna de las dos comparaciones acertó. En una sola expresión, sin anidar condicionales, tienes "empieza por 6 o por 7".

Y lo mejor: ampliar la lista no cambia la fórmula. Si mañana hay que incluir también el grupo 2, añades el valor a la constante y ya está.

Idea 2: la división que borra las filas que no interesan

La segunda parte es la que hace levantar una ceja: BUSCARX(B2:B11; B2:B11 / BYROW(...); F2:F11).

Se busca el número de asiento dentro de la propia columna de números de asiento. Suena absurdo hasta que ves qué le pasa a esa columna antes de buscar en ella.

El divisor es la misma comparación perpendicular de antes, pero aplicada a los tres primeros caracteres y contra los códigos de proveedor. Devuelve verdadero en las filas de proveedor y falso en el resto. Y en Excel, falso vale cero.

Así que al dividir la columna de asientos por esa máscara ocurre lo siguiente:

  • En las filas de proveedor, se divide entre 1 y el número de asiento se conserva intacto.
  • En todas las demás, se divide entre cero y sale un error de división.

BUSCARX ignora los errores al buscar. Resultado: solo puede encontrar coincidencia en las filas de proveedor, y como busca el número de asiento, encuentra la línea de proveedor de ese asiento concreto. La tercera columna del BUSCARX devuelve el nombre.

Es el truco clásico de "dividir para filtrar", el mismo que se usaba con la función de búsqueda antigua, pero aplicado aquí con una máscara construida al vuelo.

El SI exterior remata: si la línea no es de gasto o ingreso, devuelve cadena vacía en lugar de ensuciar la columna.

El fichero del caso incluye además un segundo escenario donde las cuentas de pago empiezan por 5 en vez de por 6 o 7, y la única modificación necesaria es cambiar los valores de la constante. Buena señal de que la fórmula está bien planteada.

El detalle regional que pilla a todo el mundo

En el hilo, Héctor Mendoza replicó la fórmula y descubrió algo que da muchos quebraderos de cabeza al compartir fórmulas: el separador de las constantes matriciales horizontales cambia según la configuración regional. En España es la barra invertida; en buena parte de Latinoamérica es la coma.

Si copias una fórmula con constantes matriciales de un compañero de otro país y te da error, casi seguro que es esto y no la lógica. Cambia el separador y funciona.

Funciones clave

  • IZQUIERDA — extrae los primeros caracteres de la cuenta para clasificarla por grupo contable.
  • Comparación perpendicular — cruzar una columna con una constante horizontal genera una matriz de todas las combinaciones; la base para probar varios criterios de golpe.
  • BYROW con O — colapsa esa matriz a una columna de valores lógicos, uno por fila.
  • BUSCARX — busca ignorando errores, que es lo que permite el truco de la división.
  • División por una máscara lógica — convierte en error todo lo que no cumple la condición, dejando visible solo lo que interesa.

Conclusión

Lo bonito de esta fórmula es que no usa nada exótico: IZQUIERDA, BYROW, BUSCARX y una división. Lo que la hace especial es combinarlas para que la búsqueda solo pueda mirar donde tú quieres.

El patrón es reutilizable mucho más allá de la contabilidad. Siempre que tengas que buscar un valor dentro de un subconjunto de filas definido por una condición, la división por máscara te ahorra montar columnas auxiliares. Casos como este, traídos por gente que se pelea a diario con diarios contables reales, son el pan de cada día en la comunidad de InflueXcel.

Más casos con estas funciones

Más contenido de Excel en InflueXcel