Los cinco problemas de limpieza de datos en Google Sheets - espacios en blanco, números almacenados como texto, filas duplicadas, capitalización inconsistente y caracteres no imprimibles - no son equivalentes. Cuatro de ellos generan datos incorrectos o mal presentados; uno puede mandar una valuación equivocada a la reunión de inversionistas de mañana sin darte ningún aviso. Esta guía cubre los cinco, pero con el foco donde corresponde: el error de números-como-texto en modelos multi-pestaña, cómo detectarlo antes de presentar, y las fórmulas exactas para blindar el modelo completo.
Las herramientas nativas de Sheets resuelven aproximadamente el 20% de estos problemas directamente. Gartner (2020) calcula que el costo organizacional promedio de una mala calidad de datos ronda los $12.9 millones de dólares anuales. Los analistas de finanzas y operaciones dedican entre el 60% y el 80% de su tiempo a preparar datos en lugar de analizarlos, según investigación publicada en el Harvard Business Review (Thomas C. Redman, 2016). La mayor parte de esa preparación es manual, repetitiva y perfectamente solucionable con el stack de fórmulas correcto.
Qué limpia Google Sheets de forma nativa (y qué no)
Google incorporó el menú Limpieza de datos en 2022, accesible desde Datos → Limpieza de datos. Permite eliminar espacios y duplicados con un clic - útil para ganancias rápidas. Pero no corrige números almacenados como texto, no normaliza mayúsculas, no elimina caracteres no imprimibles ni maneja tipos de datos mixtos. Para todo eso, necesitas fórmulas.
| Problema | Menú nativo | Fórmula necesaria |
|---|---|---|
| Espacios iniciales/finales | Sí (Recortar espacios en blanco) | TRIM() |
| Filas duplicadas | Sí (Quitar duplicados) | UNIQUE() |
| Números como texto | No | VALUE(), --, pegar como valores |
| Capitalización inconsistente | No | PROPER(), UPPER(), LOWER() |
| Caracteres no imprimibles | No | CLEAN() |
| Formatos de fecha mixtos | No | DATEVALUE() + parseo manual |
A partir de abril de 2026, la documentación oficial de Google Sheets confirma que el menú de Limpieza de datos se introdujo en 2022 junto con la función MAP - pero ninguno de los dos resuelve automáticamente problemas de coerción de tipos ni errores de codificación.
Números almacenados como texto en Google Sheets: el error silencioso que rompe modelos financieros
Este es el único problema de esta lista que puede destruirte en tiempo real sin darte ningún error visible. El resto generan datos incorrectos o mal formateados; este genera ceros silenciosos en fórmulas que aparentan estar funcionando correctamente.
El escenario: exportas el cierre mensual desde tu ERP hacia la pestaña Ingresos. Los números llegan alineados a la izquierda - señal de alerta si sabes mirar, pero ningún mensaje de error. En la pestaña FCFF, tu fórmula =SUM(Ingresos!B2:B50) devuelve 0. En la pestaña Análisis_Retorno, la TIR calculada es incorrecta. Tu jefe ve una valuación equivocada en la presentación del día siguiente.
No hay #ERROR. No hay #VALUE!. Solo ceros donde debería haber millones. Eso lo hace sistemáticamente más peligroso que cualquier otro problema de esta guía.
Cómo detectar números almacenados como texto
Tres señales visuales inmediatas:
- Las celdas están alineadas a la izquierda (los números se alinean a la derecha por defecto)
- Aparece un pequeño triángulo verde en la esquina superior izquierda de la celda
=SUM()sobre el rango devuelve0en lugar del total esperado
Para confirmarlo con fórmula:
=ISNUMBER(B2)
Si devuelve FALSE en una celda que visualmente parece un número, tienes un problema de tipo. Para contar cuántas celdas del rango están afectadas:
=SUMPRODUCT(--(NOT(ISNUMBER(B2:B500))))
Cómo corregir números almacenados como texto
La corrección más rápida es el doble negativo para forzar la coerción:
=--A2
O VALUE() de forma explícita:
=VALUE(A2)
Para cadenas con símbolo de moneda como "$1,250.00", elimina el símbolo y el separador de miles antes de convertir:
=VALUE(SUBSTITUTE(SUBSTITUTE(A2,"$",""),",",""))
Si trabajas con pesos mexicanos o colombianos y el separador de miles es el punto, ajusta el SUBSTITUTE según el formato del sistema de origen:
=VALUE(SUBSTITUTE(SUBSTITUTE(A2,"$",""),".",""))
La capa de limpieza: la arquitectura que protege el modelo completo
El error más costoso no es importar datos sucios - es que los datos sucios lleguen directamente a las fórmulas de cálculo sin ninguna capa de validación en el medio. La estructura que previene el problema de raíz:
- Pestaña
Datos_Raw: datos importados sin modificar desde el ERP o CRM. - Pestaña
Datos: aplicaVALUE(),TRIM()yCLEAN()sobreDatos_Raw. Esta es la única pestaña que las hojas downstream deben referenciar. - Pestañas de cálculo (
FCFF,Análisis_Retorno, etc.): nunca referencianDatos_Rawdirectamente.
Con esta estructura, cualquier problema de limpieza se contiene en una sola pestaña y no se propaga downstream.
La celda de validación que convierte un modelo operacional en uno listo para inversionistas
El paso que marca la diferencia es una verificación explícita que falle de forma visible cuando los datos upstream están mal formateados. Agrega esta fórmula en una celda prominente al inicio de tu pestaña FCFF o en tu resumen ejecutivo:
=IF(SUMPRODUCT(--(NOT(ISNUMBER(Ingresos!$B$2:$B$500))))>0,
"⚠️ "&SUMPRODUCT(--(NOT(ISNUMBER(Ingresos!$B$2:$B$500))))&" celdas de ingresos llegaron como texto - valida antes de presentar",
"✓ Datos de ingresos validados")
Aplica formato condicional sobre esa celda: fondo rojo cuando el texto comienza con "⚠️", fondo verde cuando comienza con "✓". Antes de que cualquier persona abra el modelo para una reunión, la primera celda que ve le dice si los datos son confiables.
Para un modelo con múltiples fuentes - ingresos, costos, capex - construye una tabla de validación al inicio del archivo:
| Fuente | Estado | Celdas con problema |
|---|---|---|
| Ingresos | =IF(SUMPRODUCT(--(NOT(ISNUMBER(Ingresos!B2:B500))))>0,"⚠️ Revisar","✓ OK") | =SUMPRODUCT(--(NOT(ISNUMBER(Ingresos!B2:B500)))) |
| Costos | =IF(SUMPRODUCT(--(NOT(ISNUMBER(Costos!B2:B500))))>0,"⚠️ Revisar","✓ OK") | =SUMPRODUCT(--(NOT(ISNUMBER(Costos!B2:B500)))) |
| Capex | =IF(SUMPRODUCT(--(NOT(ISNUMBER(Capex!B2:B500))))>0,"⚠️ Revisar","✓ OK") | =SUMPRODUCT(--(NOT(ISNUMBER(Capex!B2:B500)))) |
Dos minutos de configuración. Cero presentaciones con valuaciones incorrectas.
Cómo eliminar espacios en blanco en Google Sheets
El problema más frecuente y el más fácil de pasar por alto. Una celda con " Ingresos " no va a coincidir con "Ingresos" en un VLOOKUP, un SUMIF o un filtro de tabla dinámica. Gartner clasifica consistentemente los errores de espacios y codificación como la principal causa de fallas de búsqueda en modelos de hojas de cálculo.
TRIM() elimina espacios al inicio, al final y los internos dobles:
=TRIM(A2)
Para aplicarlo a toda una columna:
=ARRAYFORMULA(TRIM(A2:A500))
TRIM maneja espacios estándar (carácter 32), pero no captura espacios de no separación (carácter 160), que aparecen frecuentemente al pegar datos desde páginas web o PDFs. Para esos:
=TRIM(SUBSTITUTE(A2, CHAR(160), " "))
El artículo Google Sheets: menú vs. fórmula para eliminar espacios profundiza en los pros y contras de cada enfoque.
Cómo quitar filas duplicadas en Google Sheets
UNIQUE() devuelve un arreglo sin duplicados - limpio y no destructivo, ya que escribe en un rango nuevo sin modificar la fuente:
=UNIQUE(A2:D500)
El menú Datos → Limpieza de datos → Quitar duplicados modifica los datos en el lugar y permite seleccionar qué columnas definen la unicidad. Para modelos donde la identidad de cada fila se define por una clave compuesta - ID de cliente + fecha de transacción, por ejemplo - el menú es más fácil de configurar que la lógica de fórmulas.
Para deduplicación condicional - conservar el registro más reciente por cliente:
=UNIQUE(SORT(A2:D500, 3, FALSE))
Esto ordena por la columna 3 de forma descendente (más reciente primero) y luego deduplica, conservando efectivamente el último registro por fila única.
Cómo normalizar mayúsculas y minúsculas en Google Sheets
"ciudad de méxico", "Ciudad De México", "CIUDAD DE MÉXICO" - tres valores que significan lo mismo pero no se agrupan correctamente en una tabla dinámica. Estandariza con PROPER(), UPPER() o LOWER() según el formato objetivo:
=PROPER(A2) → "Ciudad De México"
=UPPER(A2) → "CIUDAD DE MÉXICO"
=LOWER(A2) → "ciudad de méxico"
PROPER() capitaliza la primera letra de cada palabra. Ten cuidado: también capitaliza después de guiones y apóstrofes, así que "o'brien" → "O'Brien" funciona correctamente, pero nombres compuestos con partículas pueden quedar mal formateados. Para nombres con reglas de capitalización irregulares, construye una tabla de excepciones como referencia.
Cómo eliminar caracteres especiales y no imprimibles en Google Sheets
CLEAN() elimina caracteres no imprimibles (códigos ASCII del 0 al 31). Es crítico para datos exportados desde sistemas legados, conversiones de PDF a hoja de cálculo, o cualquier información que haya pasado por una API donde la codificación se corrompe en el camino:
=CLEAN(A2)
Combínalo con TRIM para una limpieza integral en un solo paso:
=TRIM(CLEAN(A2))
La documentación de la API de Google Sheets señala que los datos importados frecuentemente retienen caracteres de salto de línea (CHAR(10)) que CLEAN elimina - es el equivalente en fórmula de lo que las herramientas de conversión de PDF deberían resolver antes de que llegues a la hoja, pero que a menudo no hacen.
Encadenar fórmulas de limpieza de datos en Google Sheets para casos complejos
Los datos importados del mundo real rara vez tienen un solo problema. Un listado de contactos exportado desde un CRM puede tener espacios iniciales, capitalización mixta y caracteres no imprimibles al mismo tiempo. Encadena las funciones:
=PROPER(TRIM(CLEAN(A2)))
El orden importa: CLEAN primero elimina caracteres no imprimibles, TRIM después elimina los espacios sobrantes (incluyendo los que quedaron donde había caracteres no imprimibles), PROPER al final aplica capitalización al string ya limpio.
Para números con símbolos de moneda y espacios:
=VALUE(TRIM(SUBSTITUTE(SUBSTITUTE(CLEAN(A2),"$",""),",","")))
Esto resuelve el stack completo: elimina caracteres no imprimibles, quita el símbolo, quita las comas como separadores de miles, elimina espacios y finalmente coerce a número.
Para limpiar columnas completas, MAP con LAMBDA (disponible desde 2022) es más limpio que ARRAYFORMULA para lambdas complejas:
=MAP(A2:A500, LAMBDA(celda, PROPER(TRIM(CLEAN(celda)))))
ARRAYFORMULA se rompe con funciones de múltiples argumentos de formas que te hacen perder 45 minutos antes de darte cuenta - MAP procesa cada celda de forma independiente y evita esas restricciones de alineación de filas.
Cuándo las fórmulas no bastan para limpiar datos en Google Sheets
Algunos problemas de limpieza no encajan bien en la lógica de fórmulas: números de teléfono en 12 formatos distintos, direcciones que requieren normalización antes de geocodificarse, o registros de transacciones con 50,000 filas donde necesitas clasificar descripciones en categorías de gasto.
Para esos escenarios, ModelMonkey puede encargarse del trabajo de clasificación y transformación conversacionalmente - describes la lógica en lenguaje natural ("normalizar todos los números de teléfono al formato E.164" o "marcar filas donde la fecha esté fuera del Q1 2025") y ejecuta la transformación directamente en tu hoja.
Preguntas frecuentes sobre limpieza de datos en Google Sheets
¿Cómo sé si mis números están almacenados como texto en Google Sheets?
Hay tres señales: las celdas se alinean a la izquierda en lugar de a la derecha, aparece un triángulo verde en la esquina superior izquierda, y =SUM() devuelve 0. Para confirmarlo: =ISNUMBER(B2) - si devuelve FALSE, el valor es texto. Para contar cuántas celdas del rango están afectadas: =SUMPRODUCT(--(NOT(ISNUMBER(B2:B500)))).
¿Cuál es la diferencia entre TRIM y CLEAN en Google Sheets?
TRIM elimina espacios en blanco: iniciales, finales y los internos dobles. No toca otros caracteres. CLEAN elimina caracteres no imprimibles (códigos ASCII 0-31), como saltos de línea o caracteres de control que vienen de exportaciones de sistemas legados o conversiones de PDF. Para datos de fuentes externas, úsalos juntos: =TRIM(CLEAN(A2)).
¿Cuándo usar ARRAYFORMULA y cuándo usar MAP con LAMBDA?
ARRAYFORMULA funciona bien con fórmulas simples de un solo argumento aplicadas a un rango (=ARRAYFORMULA(TRIM(A2:A500))). Se rompe con funciones de múltiples argumentos. MAP con LAMBDA procesa cada celda de forma independiente y soporta cualquier fórmula, incluyendo lambdas complejas. Para limpieza de datos - donde típicamente encadenas CLEAN, TRIM y PROPER - usa MAP.
¿Cómo valido que la limpieza se propagó correctamente en un modelo multi-pestaña?
Agrega una celda de validación en tu pestaña de cálculo usando =SUMPRODUCT(--(NOT(ISNUMBER(Ingresos!$B$2:$B$500)))) para contar celdas que llegaron como texto. Si el resultado es mayor a cero, los datos upstream tienen un problema de tipo que afectará cualquier SUM, SUMIF o cálculo financiero sobre ese rango. Aplica formato condicional (rojo/verde) para que el estado sea visible de inmediato al abrir el modelo.
¿Cuándo conviene usar el menú de Limpieza de datos en lugar de fórmulas?
El menú (Datos → Limpieza de datos) es útil para limpieza puntual y no recurrente: eliminar espacios en un archivo estático, quitar duplicados en un dataset que no se actualiza más. Si el archivo recibe datos nuevos periódicamente - un reporte mensual, una exportación semanal del CRM - las fórmulas son superiores porque se aplican automáticamente a los datos nuevos sin intervención manual.
En resumen
Google Sheets resuelve espacios y duplicados con su menú nativo. Todo lo demás - coerción de tipos, normalización de capitalización, eliminación de caracteres especiales, validación en modelos multi-pestaña - requiere fórmulas. El problema que más daño hace no es el más complejo: es VALUE() versus números-como-texto en una columna que alimenta tres pestañas downstream. Agrega la tabla de validación con ISNUMBER al inicio de tu modelo. Encadena CLEAN, TRIM, PROPER y VALUE para datos con múltiples problemas. Usa MAP con LAMBDA para rangos grandes.
Lo que toma 20 minutos de trabajo manual para 100 filas se convierte en 30 segundos de fórmula para 10,000. Y lo que podría arruinar una presentación de inversionistas se convierte en una celda verde al inicio del modelo.