El libro se llama Cobros_Asignacion_Marzo.xlsx. Una hoja tiene los cobros bancarios exportados del banco, otra el libro de ventas abierto, y una columna de BUSCARV entre ambas decide en la cuenta de qué cliente cae cada pago. La clave es la referencia de cliente de dieciséis dígitos que el banco arrastra desde el aviso de pago del pagador.
Es la forma de toda hoja de asignación de cobros de todo equipo financiero pequeño del país, y la mañana de la remesa de marzo informaba de esto:
| En la hoja de asignación | La verdad | |
|---|---|---|
| Cobros en el fichero | 16 | 16 |
| Líneas sin asignar | 0 | 0 |
| Caja cobrada | 145.922,40 | 145.922,40 |
| Caja en la cuenta correcta | 145.922,40 | 118.254,45 |
| Referencias con los dígitos que se escribieron | 16 | 0 |
Todos los cobros se asignaron. La caja cuadró al céntimo, ese día, en total, y en todos los cierres mensuales posteriores. Y 27.667,95 — el 18,96% de la remesa — estaban en dos cuentas que no los habían pagado, porque unas referencias de dieciséis dígitos se pegaron en una columna con formato General, y Excel no guarda dieciséis dígitos.
Lo único que alguien escaló esa semana fue una celda de control que decía REVISAR sobre una diferencia que mostraba 0,00. Eso costó una tarde.
Qué cubre esto. Todo lo que sigue se comporta igual en Excel 2016, 2019, 2021, 2024, Microsoft 365 y Excel para Mac, y casi todo igual en Google Sheets y LibreOffice, porque el límite de quince dígitos y la aritmética binaria que hay debajo no son un fallo de Excel — son IEEE 754, el estándar de coma flotante que usa cada hoja de cálculo, cada base de datos y cada lenguaje de programación de tu escritorio.
REDONDEAR,ABS,TEXTO,VALOR,LARGO,DERECHA,IGUAL,ESNUMERO,ESTEXTO,SUMA,SUMAR.SI,SUMAR.SI.CONJUNTO,CONTAR.SI,CONTAR.SI.CONJUNTO,SUMAPRODUCTO,BUSCARV,INDICE,COINCIDIR,SIySI.ERRORfuncionan en todas;BUSCARX,LET,UNICOSyFILTRARnecesitan 365 o 2021 y posteriores. El ejemplo es una hoja de asignación de cobros porque es donde el coste aparece como dinero, pero es el mismo trabajo que una columna de códigos de barras, un número de póliza, una cuenta bancaria, un IMEI, un identificador tipo DNI o número de la Seguridad Social, un número de pedido de un ERP, o cualquier total de factura que alguien haya comparado con=.
1) Dieciséis Referencias, Catorce Claves
Las dieciséis referencias del fichero de marzo son todas distintas. Se ve leyéndolas: dos acaban en …5671 y …5672, otras dos en …5694 y …5695. Dieciséis clientes, dieciséis referencias, ninguna ambigüedad en ninguna parte.
Después se pegaron en una columna que Excel consideraba una columna de números.
| Desenlace | Filas | Valor | Peso en la remesa | ¿Detectado? |
|---|---|---|---|---|
| Asignado a la cuenta correcta | 14 | 118.254,45 | 81,04% | n/a |
| Asignado a la cuenta equivocada | 2 | 27.667,95 | 18,96% | día 34 y mes cinco |
| Referencia alterada por Excel | 16 | 145.922,40 | 100% | nunca |
Esas tres filas no suman de la manera habitual, y ahí está el asunto. La última fila es el daño; la del medio es solo la parte del daño que además costó dinero este trimestre. Catorce referencias también quedaron corrompidas — simplemente no tenían gemela con la que colisionar, así que siguieron pareciendo, comportándose y casando exactamente igual que referencias intactas.
Dieciséis Referencias, Catorce Claves, Un Total Cuadrado
La remesa de marzo. La columna B es la referencia de cliente de dieciséis dígitos tal como está en el fichero del banco. La columna C es lo que la celda con formato General del libro contiene realmente después de que Excel aplicara su límite de quince dígitos significativos: el mismo número con un cero donde estaba el dígito dieciséis. Las dieciséis cambiaron; solo dos parejas — Bewdley/Dursley y Eccleshall/Fishguard — se diferenciaban únicamente en ese dígito, y eso es lo que convirtió dieciséis claves distintas en catorce. La columna E es la cuenta a la que BUSCARV abonó el cobro, que para esas dos parejas es la primera fila que lleva la clave compartida. Los cobros suman 145.922,40 tanto en el reparto correcto como en el equivocado, que es precisamente por lo que nada saltó. Todas las cifras del artículo se calculan a partir de esta tabla.
fxLas celdas con fórmulas están resaltadas en verde
Pasa el mouse sobre las celdas con fórmulas para ver la fórmula y resaltar las celdas referenciadas
🎯 Escenario: Cuando un identificador se pega en una hoja, la pregunta útil no es "¿casó todo?" Aquí casó todo. La pregunta es "¿cuántos valores distintos contiene la columna clave, y es ese el número de cosas que hay?" Dieciséis filas, catorce claves, y nada en ningún sitio de Excel lo dice en voz alta.
2) Qué Guarda Excel Realmente
Excel guarda cada número como un doble IEEE 754 de 64 bits. Eso le da un rango de aproximadamente 1E-308 a 1E+308, que es más de lo que nadie necesita, y quince dígitos decimales significativos de precisión, que es menos de lo que algunos necesitan — y quien necesita el dígito dieciséis es casi siempre quien tiene un identificador en la mano, no una cantidad.
De ahí se derivan dos cosas distintas, y confundirlas es la razón de que este tema tenga fama de esotérico.
La primera es un límite duro que se aplica al introducir el dato. Escribe o pega un número con más de quince dígitos significativos en una celda, y Excel guarda los quince primeros y sustituye el resto por ceros. No redondea — sustituye. Ocurre al pulsar Intro, antes de que se ejecute ninguna fórmula, y no es una cuestión de formato:
Escribes: 7100480000345671
Excel guarda: 7100480000345670 ← el 1 ha desaparecido, y ha desaparecido del fichero
No hay formato, ancho de columna, opción ni reparación que devuelva ese dígito, porque nunca se escribió. La pila de deshacer lo conserva hasta que cierras el libro; después, la única copia de ese dígito está en el sitio de donde vinieron los datos.
La segunda es la imprecisión ordinaria de las fracciones binarias. 0,1 no tiene representación exacta en base 2 por la misma razón que 1/3 no la tiene en base 10, así que una celda con 0,1 contiene algo a una fracción de distancia de 0,1, y las sumas de valores así aterrizan a una fracción de donde dice la aritmética. Esa fracción es del orden de 1E-16 relativo, que es invisible en dinero y letal en una comparación — sección 5.
El primer problema destruye datos. El segundo destruye pruebas. Tienen la misma causa y arreglos completamente distintos, y un libro puede sufrir los dos a la vez, que es lo que le pasaba a este.
🎯 Escenario: Si una columna contiene algo que leerías en voz alta dígito a dígito — una cuenta, un código de barras, una referencia, un número de serie — no es un número, tenga el aspecto que tenga. Los números son cosas que sumarías. Nadie ha sumado nunca dos referencias de cliente.
3) La Celda Que Mostraba lo Correcto
La razón de que esto sobreviva al contacto con gente cuidadosa es que la celda corrompida suele tener buen aspecto.
Un número de dieciséis dígitos en una columna con formato General se comporta de una de dos maneras según algo tan poco significativo como lo ancha que esté la columna:
| Ancho de columna | Lo que ves | Lo que hay guardado |
|---|---|---|
| Estrecha | 7,1E+15 | 7100480000345670 |
| Suficientemente ancha | 7100480000345670 | 7100480000345670 |
La versión en notación científica es la escandalosa. La gente ve 7,1E+15, lo reconoce como un error, ensancha la columna o aplica un formato de número, ve volver los dígitos y concluye que lo ha arreglado. No lo ha arreglado — ha hecho legible el daño y ha dejado de mirar, porque lo que ahora puede leer acaba en cero y, a primera vista, no hay motivo para desconfiar de un cero.
La señal no está en ninguna celda concreta. Está en la columna:
=SUMAPRODUCTO(--(DERECHA(B2:B17;1)="0")) → 16
Dieciséis referencias seguidas terminadas todas en el mismo dígito no es una coincidencia que debas estar dispuesto a aceptar; si las referencias fueran realmente aleatorias es un suceso de una entre diez mil billones. Es la forma más rápida de detectar esto desde el otro lado de una mesa, y funciona en el libro de otra persona sin saber nada de dónde salieron los datos.
La segunda señal cuesta dos segundos:
=SUMAPRODUCTO(--ESNUMERO(B2:B17)) → 16
Dieciséis identificadores guardados como números. Una columna de referencias sana responde 0 a esa fórmula, porque todos sus valores son texto.
🎯 Escenario: Ensanchar una columna cambia lo que puedes ver y nunca cambia lo que hay guardado. Si el arreglo de un problema de datos fue un ancho de columna, era un problema de visualización, y si era de visualización los datos nunca estuvieron en peligro. Cuando esas dos historias se contradicen — los dígitos volvieron, pero volvieron acabando en cero — cree al valor guardado.
4) Cómo Dos Clientes Se Convirtieron en Uno
En cuanto el dígito dieciséis es un cero en todas las filas, dos de las parejas de este fichero dejan de ser distinguibles:
Bewdley Heating 7100480000345671 → 7100480000345670
Dursley Mechanical 7100480000345672 → 7100480000345670 idénticas
Eccleshall Trade 7100480000345694 → 7100480000345690
Fishguard Heating 7100480000345695 → 7100480000345690 idénticas
La fórmula de asignación es la que escribe todo el mundo:
=BUSCARV($B2; Libro!$A:$D; 4; FALSO)
FALSO está haciendo su trabajo a la perfección. Es una coincidencia exacta, encontró una coincidencia exacta, y la devolvió. Lo que ninguna función de búsqueda de ninguna hoja de cálculo te dirá jamás es que había dos coincidencias exactas y te dio la primera — BUSCARV, BUSCARX e INDICE/COINCIDIR devuelven por defecto el primer acierto y ninguna tiene un canal para informarte de "pero había más".
Así que los 18.420,65 de Dursley Mechanical se abonaron a Bewdley Heating, y los 9.247,30 de Fishguard Heating a Eccleshall Trade. Cuatro cuentas mal por dos colisiones, y la aritmética posterior es impecable:
| Bewdley | Dursley | Eccleshall | Fishguard | |
|---|---|---|---|---|
| Pagó realmente | 12.905,40 | 18.420,65 | 6.315,80 | 9.247,30 |
| El libro dice que se recibió | 31.326,05 | 0,00 | 15.563,10 | 0,00 |
| Diferencia | +18.420,65 | −18.420,65 | +9.247,30 | −9.247,30 |
Todas esas diferencias se compensan a cero entre las cuatro cuentas, que es exactamente por lo que la caja cuadraba. El banco envió 145.922,40, el libro recibió 145.922,40, y una conciliación que compara dos totales es estructuralmente incapaz de notar que el dinero está en las líneas equivocadas.
Lo que pasó después no es cosa de hojas de cálculo. A Dursley Mechanical se le reclamó el día 12, se le volvió a reclamar el 26, y se le cortó el suministro el día 34 por 18.420,65 que había pagado el primer día — el aviso de pago que envió como prueba se buscó en la hoja de asignación y no apareció, porque buscar 7100480000345672 en una columna que ahora contiene 7100480000345670 no encuentra nada. A Fishguard se le reclamaron 9.247,30 y aportó la misma prueba con el mismo resultado.
Y Eccleshall Trade, cuya cuenta mostraba 9.247,30 de un pago que nunca hizo, parecía un cliente al día y con margen. Se le sirvió esa misma cantidad de más en el mes tres, entró en administración concursal en el mes cinco, y los 9.247,30 que se dieron por perdidos son los mismos 9.247,30 que pertenecían a Fishguard desde el principio.
🎯 Escenario: Una búsqueda exacta te dice que encontró algo. Nunca te dice cuántas cosas encontró. Si una columna clave puede contener duplicados — y cualquier clave que haya pasado por una celda con formato General puede — el número de coincidencias es una pregunta aparte que hay que hacer aparte: =CONTAR.SI(Libro!$A:$A;$B2) al lado de la búsqueda, y cualquier cosa distinta de 1 es una línea sobre la que nadie debería estar pagando.
5) La Tarde Gastada en 0,00
Mientras todo eso estaba en marcha, la celda de control del pie de la hoja de asignación era lo que se escaló:
D20: =SUMA(D2:D17) 145.922,40
F20: =SUMA(Libro!F2:F17) 145.922,40
G20: =D20-F20 0,00
G21: =SI(D20=F20;"OK";"REVISAR") REVISAR
Una diferencia de cero y una prueba que dice que difieren, en celdas contiguas, en el mismo libro, sobre los mismos dos números. Ahí se fueron tres horas, incluidos veinte minutos de alguien reescribiendo a mano las cifras del libro de ventas.
Las dos celdas dicen la verdad. G20 muestra 0,00 porque la diferencia real es de unos 1,5E-11 y has pedido dos decimales; amplíalo a quince y el cero se convierte en algo como 0,0000000000145. G21 compara los dos dobles bit a bit, donde difieren en el último lugar o en los dos últimos, e informa correctamente de que no son el mismo número. Sumar los mismos dieciséis importes en otro orden basta para producir eso, y las dos hojas estaban en orden distinto por diseño.
Aquí hay un matiz que merece conocerse, porque es lo que hace que el comportamiento parezca arbitrario. Excel aplica una limpieza cosmética a la última operación de una fórmula cuando esa operación es una resta de dos números casi iguales, y fuerza el resultado a cero. Microsoft lo documenta con esta pareja:
=0,5-0,4-0,1 0 ← limpieza aplicada
=1*(0,5-0,4-0,1) -2,77555756156289E-17 ← la misma aritmética, sin limpieza
La multiplicación es la última operación de la segunda fórmula, así que la resta ya no cumple la condición y el residuo sobrevive hasta el resultado. Esa es toda la diferencia entre las dos líneas, y explica por qué una celda de diferencia muestra tantas veces un cero limpísimo mientras una prueba sobre esos mismos dos valores dice que son distintos: a la resta se le concede el favor y a la comparación no.
Así que el arreglo no es salir a cazar la cienmilmillonésima que falta. Es dejar de hacer una pregunta cuya respuesta no te importa. El dinero es igual cuando es igual al céntimo:
=SI(REDONDEAR(D20-F20;2)=0;"OK";"REVISAR") OK
=SI(ABS(D20-F20)<0,005;"OK";"REVISAR") OK
=SI(TEXTO(D20;"0,00")=TEXTO(F20;"0,00");"OK";"REVISAR") OK
La primera es la que hay que escribir por defecto; la segunda es la que quieres cuando la tolerancia es una decisión de negocio y no un artefacto de redondeo, y es el sitio honrado donde dejar escrita esa decisión. La tercera funciona y es más lenta, pero tiene la ventaja de ser obviamente correcta para quien lea la hoja sin haber oído hablar nunca de la coma flotante.
🎯 Escenario: Un = a secas entre dos valores monetarios calculados es un fallo esperando los datos adecuados, en todas las hojas de cálculo que se han construido. La regla es lo bastante corta para retenerla: los números que escribiste pueden compararse con =; los números que calculó Excel deben compararse con REDONDEAR o ABS. Y fíjate en lo que costó esto — tres horas sobre el único número del libro que era completamente correcto, mientras 27.667,95 estaban en las cuentas equivocadas sin levantar ni una bandera, porque un mensaje de error es imposible de ignorar y un total correcto es imposible de cuestionar.
6) Dónde Va el Redondeo
El instinto después de una tarde así es envolver la comparación en REDONDEAR y seguir. Eso arregla la comparación, y deja la causa en su sitio si la causa estaba aguas arriba.
Hay dos trabajos de redondeo distintos y van en sitios distintos:
Redondea en el punto en que se crea el valor, cuando lo que estás creando es dinero. El total de una línea no es cantidad * precio — es dinero, y el dinero tiene dos decimales por definición:
=REDONDEAR(D2*E2; 2) el total de la línea, tal como se facturará
Si te lo saltas, el total de la factura es la suma de dieciséis valores que arrastran seis u ocho decimales de aritmética de tarifas cada uno, y no coincidirá con la suma de lo que la factura imprimió de verdad, por un céntimo o dos. Ese céntimo no tiene nada de misterio de coma flotante — es la diferencia entre redondear dieciséis números y redondear su suma, y pasaría idéntico con lápiz y papel.
Redondea solo para mostrar, al final, cuando lo que tienes es una medida, una tasa o una media. Redondear una tasa a dos decimales y multiplicarla luego por 10.000 unidades mete el error de redondeo en la respuesta 10.000 veces.
La prueba para saber cuál tienes: ¿vería alguna vez un cliente, un auditor o un banco este número exacto como una cifra por sí misma? Si sí, redondéalo donde se crea, y deja que todo lo que viene después sume céntimos ya redondeados. Si no, déjalo en paz y dale formato.
=SUMAPRODUCTO(D2:D17; E2:E17) el total matemáticamente puro
=SUMAPRODUCTO(REDONDEAR(D2:D17*E2:E17; 2)) el total de lo que de verdad facturaste
Esos dos son números distintos y los dos son respuestas correctas a preguntas distintas. El que tiene que cuadrar con el libro de ventas es el segundo.
🎯 Escenario: Cuando un total baila unos céntimos y nadie encuentra dónde, la respuesta casi nunca es la coma flotante — los errores de coma flotante son del orden de 1E-16 relativo, que sobre un total de 145.922,40 es una cienmilmillonésima de céntimo. Las diferencias del tamaño de un céntimo son diferencias de política de redondeo: alguien redondeó las líneas y alguien redondeó la suma. Averigua quién, decide cuál es la correcta, y escríbela una vez.
7) La Casilla Que Destruye Tu Libro
En algún momento de una tarde como la de la sección 5, alguien encuentra esto en Archivo ▸ Opciones ▸ Avanzadas ▸ Al calcular este libro y suena exactamente a lo que hace falta:
☐ Establecer la precisión que se muestra
No la marques. No cambia cómo compara, calcula ni muestra Excel nada. Lo que hace es sobrescribir permanentemente cada valor guardado del libro con su valor mostrado, de inmediato, en todas las celdas de todas las hojas. Una celda con 145.922,4046 formateada a dos decimales pasa a ser una celda con 145.922,40. Los dígitos restantes se destruyen, no se ocultan; desmarcar la casilla no los devuelve; no hay deshacer después de guardar.
El daño es peor donde menos se ve. Una columna de tasas formateada a dos decimales por pulcritud — 0,0725 mostrándose como 0,07 — pierde el 7% de su valor por una casilla que nadie recuerda haber marcado, y todos los cálculos que vienen después quedan mal en silencio desde entonces. Modelos enteros se han arruinado así por alguien que intentaba arreglar un descuadre de un céntimo.
Si de verdad quieres que los valores guardados coincidan con los mostrados, redondéalos: =REDONDEAR(x;2), en las celdas donde corresponda, a la vista, columna por columna, donde la siguiente persona pueda ver que lo hiciste.
🎯 Escenario: Cualquier ajuste cuya descripción contenga la palabra "precisión" y cuyo alcance sea "este libro" merece diez minutos de lectura antes de marcarlo. Este es la única opción de Excel que reescribe en silencio datos que ya tienes, y está a dos clics de un menú que la gente abre buscando el modo de cálculo.
8) Guardar un Identificador Para Que Sobreviva
El arreglo de la columna de referencias no es una fórmula. Es el formato de las celdas antes de que llegue nada a ellas, porque después de que llegue ya es tarde.
Escribir o pegar en una hoja. Selecciona la columna, Formato de celdas ▸ Texto, y luego pega. Las celdas con formato de texto conservan todos los caracteres, conservan los ceros iniciales y no se convierten nunca. Un apóstrofo delante — '7100480000345671 — hace lo mismo para una celda suelta; el apóstrofo no se guarda ni se imprime.
Importar un CSV. Aquí es donde se crean la mayoría de estos casos, y la diferencia entre dos formas de abrir el mismo fichero es toda la historia:
| Cómo se abre el fichero | Qué le pasa a una referencia de 16 dígitos |
|---|---|
Doble clic en el .csv | se aplica formato General, el dígito dieciséis se pone a cero, en silencio |
| Datos ▸ Desde texto/CSV ▸ Transformar ▸ tipo de columna Texto | se conservan todos los dígitos |
| Power Query, columna tipada como texto en la consulta | se conservan todos los dígitos, y siguen así en cada actualización |
Power Query es la opción a la que acudir si la importación se repite, precisamente porque el tipo de la columna queda guardado en la consulta y no en la memoria de alguien sobre lo que hizo clic el mes pasado.
Cuando ya ha ocurrido. No hay reparación dentro del libro. TEXTO(B2;"0"), dar formato de texto a posteriori y reescribir los dígitos visibles producen todos una cadena de dieciséis dígitos terminada en el cero que puso Excel — una versión en texto del número equivocado, que es peor que el número equivocado porque ahora parece deliberada. La única recuperación es traer la columna otra vez del origen: el CSV original del banco, la exportación del ERP, el sistema de registro. Si ese origen ya no está, los dígitos ya no están.
Lo que hay que comprobar antes de fiarte de una columna de texto. El texto y los números no coinciden entre sí en ninguna búsqueda:
=BUSCARV("7100480000345671"; A:B; 2; FALSO) #¡N/D! si la columna A tiene números
=BUSCARV(7100480000345671; A:B; 2; FALSO) #¡N/D! si la columna A tiene texto
Los dos lados de un cruce tienen que ser del mismo tipo, y el #¡N/D! escandaloso que sale cuando no lo son es una bendición comparado con todo lo demás de este artículo. Arréglalo poniendo los dos lados como texto — =TEXTO(A2;"0") en el lado numérico o, mejor, importando los dos como texto desde el principio.
🎯 Escenario: La decisión sobre el tipo de una columna es de quien diseña la hoja, no de quien le toca pegar datos un martes. Una plantilla vacía con las columnas de identificadores ya formateadas como Texto es un trabajo de cinco minutos que acaba con esta clase de problema para siempre y para todo el que la use.
9) La Comprobación de Duplicados Que No Ve el Duplicado
Aquí está la parte que atrapa a la gente cuidadosa, y merece leerse dos veces, porque la defensa obvia contra todo lo anterior no funciona.
Supón que lo hiciste bien. Las referencias son texto, los dieciséis dígitos intactos, ninguna truncada. Ahora quieres confirmar que no hay duplicados, así que escribes la fórmula que escribe todo el mundo:
=CONTAR.SI($B$2:$B$17; B2) → 2 para Bewdley, 2 para Dursley
Dos. En una columna donde los dos valores son genuinamente distintos. CONTAR.SI, CONTAR.SI.CONJUNTO, SUMAR.SI, SUMAR.SI.CONJUNTO y COINCIDIR convierten el texto con aspecto numérico otra vez en número antes de comparar, lo que las devuelve de lleno al territorio de los quince dígitos — así que, para CONTAR.SI, "7100480000345671" y "7100480000345672" son el mismo criterio. Denuncia duplicados que no existen, y sobre datos que sí contienen un duplicado contará alegremente como tal una referencia distinta.
La misma conversión implica que SUMAR.SI sumará bajo una sola referencia los importes de dos clientes distintos, en silencio, sobre una columna de texto perfectamente intacta.
La función que no hace esto es IGUAL, que compara texto carácter a carácter, mayúsculas incluidas, y no convierte nunca:
=SUMAPRODUCTO(--IGUAL($B$2:$B$17; B2)) → 1 en todas las filas, como debe ser
=SUMAPRODUCTO(--(CONTAR.SI($B$2:$B$17;$B$2:$B$17)>1)) → 4, que es mentira
Para buscar en lugar de contar, el mismo principio: =COINCIDIR(VERDADERO; IGUAL($A$2:$A$500;$B2); 0) es la búsqueda a prueba de colisiones sobre identificadores largos, y BUSCARX con IGUAL dentro hace el mismo trabajo de forma más legible. Son más lentas que CONTAR.SI. Sobre una clave que tiene que estar bien, eso no es una consideración.
🎯 Escenario: Por esto "ya comprobamos los duplicados" no es una prueba sobre un identificador largo. La comprobación y el fallo comparten el mismo punto ciego — las dos dejan de leer en el dígito quince — así que la comprobación dará la razón a los datos corrompidos y se la quitará a los datos limpios. Si una columna contiene algo de más de quince dígitos, IGUAL es la única comparación de Excel que lo lee entero.
10) Búsquedas Sobre Números Que Calculó Excel
La colisión de este artículo venía de un identificador, pero la misma forma aparece un paso más a la izquierda, sobre claves que se calculan:
=BUSCARX(D2*1,2; Tarifas!$A:$A; Tarifas!$B:$B) #¡N/D!, a veces, imprevisiblemente
D2*1,2 produce un doble que puede quedar a un bit del valor escrito en la tabla de tarifas, y una búsqueda exacta sobre un doble es el mismo = a secas de la sección 5 con otro sombrero. Funciona durante meses y luego falla en una fila, que es el peor calendario de fallo disponible.
El arreglo es el mismo que en todo este artículo — no le hagas hacer a un valor de coma flotante un trabajo que necesita una identidad:
=BUSCARX(REDONDEAR(D2*1,2; 2); Tarifas!$A:$A; Tarifas!$B:$B) redondea la clave
=BUSCARX(TEXTO(D2*1,2;"0,00"); Tarifas!$A:$A; Tarifas!$B:$B) o hazla texto en los dos lados
Las búsquedas aproximadas sobre valores por tramos tienen una versión más suave del mismo problema: un límite de exactamente 1.000,00 calculado como 999,9999999999999 cae en el tramo de abajo. Redondea el valor antes de la búsqueda, o pon los límites de los tramos donde ningún valor calculado pueda aterrizar exactamente.
🎯 Escenario: Toda clave de búsqueda de un libro es o algo que escribió una persona, o algo que emitió un sistema, o algo que calculó Excel. Las dos primeras son seguras de casar exactamente. La tercera necesita redondeo antes de convertirse en clave, siempre, sin excepción — y el motivo para escribir el REDONDEAR incluso cuando ahora funciona es que la fila que lo rompe todavía no ha llegado.
11) Cinco Comprobaciones
Pásalas por cualquier hoja que tenga un identificador como clave. Las dos primeras cuestan un minuto y habrían pillado todo lo de este artículo la mañana de la remesa.
1. ¿Está el identificador guardado como texto?
=SUMAPRODUCTO(--ESNUMERO($B$2:$B$17)) → 16
La respuesta que quieres es 0. Todo identificador guardado como número es un identificador que Excel tiene derecho a cambiar, y que cambiará sin avisar en cuanto pase de quince dígitos.
2. ¿Terminan todos en el mismo dígito?
=SUMAPRODUCTO(--(DERECHA($B$2:$B$17;1)="0")) → 16 de 16
El diagnóstico más rápido de este artículo. Dieciséis referencias realmente aleatorias compartiendo el último dígito es un suceso de una entre diez mil billones; dieciséis referencias compartiendo un cero final es un martes cualquiera.
3. ¿Hay tantas claves distintas como cosas?
=SUMAPRODUCTO(1/CONTAR.SI($B$2:$B$17;$B$2:$B$17)) → 14 claves para 16 clientes
Dos claves de menos son dos colisiones son al menos dos cobros en la cuenta equivocada. Sobre una columna de texto intacto, =FILAS(UNICOS($B$2:$B$17)) responde a lo mismo sin convertir nada — y fíjate, por la sección 9, en que CONTAR.SI solo es de fiar en la fórmula de arriba porque estos valores son números de verdad.
4. ¿Cuadra la caja por cuenta, y no solo en total?
=SUMAR.SI(cuenta_asignada; $A2; cobro) vs =SUMAR.SI(cliente_real; $A2; cobro)
=SUMAPRODUCTO(--(REDONDEAR(col1-col2;2)<>0)) → 4 cuentas
La única comprobación de esta lista que pilla la pérdida real, porque los totales son idénticos por construcción. Una conciliación de dos grandes totales demuestra que no se perdió nada. No demuestra absolutamente nada sobre dónde fue a parar.
5. ¿Hay algo en este libro comparado con un signo igual a secas?
Ctrl+B, Buscar dentro de ▸ Fórmulas, y busca =SI( con un = dentro sobre valores calculados. Cada uno de ellos es o seguro porque los dos lados se escribieron a mano, o un fallo que todavía no ha saltado. Convierte los del segundo tipo en REDONDEAR(a-b;2)=0 mientras estás ahí.
12) Doce Trampas
- Quince dígitos significativos, y el dieciséis se convierte en cero al introducirlo. No al guardar, no al calcular — en el momento en que pulsas Intro, antes de que ninguna fórmula vea la celda.
- Los dígitos no se pueden recuperar del fichero. Ningún formato, ancho, función ni deshacer después de cerrar. La única copia está en el sistema de origen, y si el origen ya no está, el dígito tampoco.
- La corrupción es invisible justo cuando más importa.
7,1E+15es escandaloso y se arregla; un número de dieciséis dígitos acabado en cero parece exactamente un número de dieciséis dígitos. - Una búsqueda exacta nunca te dice que había dos coincidencias.
BUSCARV,BUSCARXeINDICE/COINCIDIRdevuelven la primera y no dicen nada. Acompaña toda búsqueda sobre una clave no fiable con unCONTAR.SI. - Un total cuadrado no demuestra nada sobre el reparto. 145.922,40 de entrada y 145.922,40 de salida fue cierto todos y cada uno de los días en que 27.667,95 estuvieron en las cuentas equivocadas.
- Un
=entre dos números calculados es un fallo esperando los datos. UsaREDONDEAR(a-b;2)=0oABS(a-b)<0,005sobre cualquier cosa que haya calculado Excel. - Una celda de diferencia que muestra 0,00 no significa que los valores sean iguales. Excel limpia una resta final de dos números casi iguales; a la comparación no le concede ese favor, y por eso las dos celdas se contradicen.
- "Establecer la precisión que se muestra" destruye permanentemente los valores guardados, en todo el libro, con un clic, sin deshacer después de guardar. Redondea en las celdas, donde se ve.
- Redondea el dinero donde se crea, no donde se muestra —
=REDONDEAR(cantidad*precio;2)— y cuenta con que la suma de líneas redondeadas difiera de la suma redondeada, porque difiere, también en papel. CONTAR.SI,SUMAR.SI,CONTAR.SI.CONJUNTO,SUMAR.SI.CONJUNTOyCOINCIDIRconvierten el texto numérico en número, así que no distinguen dos referencias de dieciséis dígitos ni cuando las dos son texto perfecto.IGUALsí, y es lo único que puede.- El texto y los números no coinciden nunca entre sí en una búsqueda. El
#¡N/D!que eso produce es el error más amable de este artículo — es el único modo de fallo de aquí que no puede esconderse. - Da formato de Texto a la columna antes de que lleguen los datos, e importa con Power Query con la columna tipada como texto. Todo arreglo posterior a la llegada es cosmético.
Nadie en esta historia fue descuidado. Quien pegó la columna de referencias del banco en la hoja de asignación hizo lo que ese trabajo ha exigido siempre. La persona de cobros que reclamó a Dursley Mechanical leía un libro que decía, sin ambigüedad, que Dursley no había pagado — y el aviso de pago de Dursley, buscado en la hoja, realmente no estaba. Quien pasó una tarde con una celda de control que decía REVISAR hacía exactamente aquello para lo que existe una celda de control: era lo único del libro que pedía ser mirado.
Lo que lo hizo caro es que el acto más trascendente de Excel sobre estos datos se ejecutó en completo silencio, en el momento del pegado, sobre una columna acerca de la cual no se le había hecho al usuario ni una sola pregunta. Cualquier otro problema de datos de una hoja de cálculo se anuncia antes o después — una referencia rota dice #¡REF!, un número en texto se niega a sumarse, una búsqueda mala dice #¡N/D! en color. Un identificador truncado produce un número con la longitud correcta, la forma correcta, en la columna correcta, que casa limpiamente contra un libro que también lo tiene mal, y que cuadra con un total correcto al céntimo.
Así que la disciplina es aburrida y no va de aritmética. Decide qué es cada columna antes de que llegue nada a ella, y dales a las columnas de identificadores el formato de Texto que necesitan el día en que se construye la plantilla. Pregunta, una vez, cuántas claves distintas contiene una columna clave, y si ese es el número de cosas que hay. Compara dinero con REDONDEAR y nunca con =, para que la única celda del libro construida para dar la alarma no se pase la vida llorando por una cienmilmillonésima de céntimo. Y cuando una conciliación cuadre exactamente, léela por lo que es — una afirmación de que no se perdió nada, y una afirmación sobre nada más en absoluto.
