Esta diferencia entre "Hacer una copia" (archivo completo) y "Copiar a" (pestaña individual) es la fuente más común de plantillas financieras rotas en equipos de finanzas.
Qué pasa con los named ranges al usar Copiar a en Google Sheets
| Lo que estás copiando | Named ranges | Fórmulas que referencian named ranges | Validación de datos con named ranges |
|---|---|---|---|
| Archivo > Hacer una copia (archivo completo) | Se copian | Intactas | Intacta |
| Pestaña > Copiar a > Nueva hoja de cálculo | No se copian | Se reescriben en notación A1 | Pierde el origen |
| Pestaña > Copiar a > Hoja de cálculo existente | No se copian | Se reescriben en notación A1 | Pierde el origen |
La documentación de Google Sheets lo indica así: "Los rangos con nombre están definidos a nivel de la hoja de cálculo, no de las hojas individuales." Eso significa que en el momento en que sacas una pestaña del archivo, cada named range que referenciaba queda reescrito o huérfano.
Las referencias de fórmulas se convierten en silencio. Si el named range apuntaba a una celda en la misma hoja que se está copiando, Sheets lo reescribe en notación A1. =TasaDescuento se convierte en =Supuestos!$B$4. Las fórmulas siguen funcionando, pero perdiste la capa autodocumentada que las hacía legibles. Cualquier revisor que audite el modelo verá direcciones crudas, no intención.
Los named ranges entre pestañas se rompen de manera definitiva. Si el named range apuntaba a una hoja que no se incluyó en la copia, obtienes #REF! o #NAME?. En un modelo de 8 pestañas con WACC, TasaImpositiva, TasaCrecimientoTerminal y supuestos de tipo de cambio ubicados en una pestaña central de Supuestos, eso genera una cascada de errores.
La validación de datos deja de funcionar. Cualquier lista desplegable que tomaba su origen de un named range pierde esa fuente. La celda conserva el último valor ingresado, pero las nuevas entradas no se validarán.
Google Sheets soporta hasta 1,000 named ranges por archivo (según la documentación de cuotas de la Sheets API v4). La mayoría de los modelos de FP&A usa entre 8 y 30, un número suficientemente pequeño como para que reconstruirlos manualmente parezca viable, pero suficientemente grande como para que sea un dolor real cuando una copia de plantilla los borra todos.
Los tres escenarios que los equipos de FP&A enfrentan en la práctica
Plantilla de reporte trimestral para la junta. Construiste un paquete limpio para el Q4, con ingresos de $4,200,000, margen bruto de 38.5% y EBITDA de $620,000, usando named ranges para PeriodoReporte, TipoCambio, PresupuestoIngresos. Copias la pestaña de P&G a un archivo nuevo para el Q1. Las fórmulas se reescriben a direcciones fijas, pero como la pestaña de Supuestos del Q1 todavía no existe, aproximadamente la mitad resuelve en #REF!. Terminas gastando 45 minutos rastreando referencias que creías documentadas.
Consolidación entidad por entidad. Tu modelo de LBO para una sola entidad tiene 8 pestañas. Clonas el archivo completo 4 veces para una estructura de 4 entidades. Bien: "Hacer una copia" preserva todo. Pero luego normalizas la pestaña de Ingresos de la entidad 3 copiando la versión de la entidad 1. Los named ranges se rompen en cada intercambio de pestaña entre archivos.
Incorporar una pestaña a un modelo existente. Construiste un análisis de waterfall en un archivo independiente y quieres integrarlo a tu paquete de DCF para una sindicación bancaria. Copias la pestaña. Todas las referencias de named ranges se reescriben a las direcciones del archivo de origen, que ahora no existen en el destino.
Tres formas de resolver los named ranges rotos después de Copiar a
Opción 1: usa referencias explícitas de pestaña para mayor portabilidad
Para cualquier supuesto del que múltiples hojas dependan, omite los named ranges y usa referencias directas:
// Frágil con "Copiar a":
=NPV(WACC, 'Flujo de Caja'!C5:C14)
// Portable:
=NPV(Supuestos!$B$4, 'Flujo de Caja'!C5:C14)
Menos legible, pero sobrevive cualquier operación de copia siempre que la pestaña de Supuestos venga incluida. Para modelos que se van a usar como plantilla y se copiarán de manera repetida (reportes de junta, modelos de clientes, consolidaciones por entidad), esta es la opción de menor mantenimiento.
Opción 2: reconstruye los named ranges con Apps Script (ejecución única)
Si usas "Copiar a" como parte de un flujo de trabajo regular, este script de Apps Script se ejecuta una sola vez en el archivo de destino y reconstruye tus named ranges a partir de una tabla de definiciones. Pégalo en Herramientas > Apps Script en el archivo de destino, actualiza el objeto definitions con los datos de tu modelo y ejecútalo una vez.
// Ejecutar una sola vez después de copiar hojas a un archivo nuevo.
// Reconstruye los named ranges a partir de un mapa de definiciones.
function rebuildNamedRanges() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
// Mapa: nombre del rango -> NombreHoja!Celda
var definitions = {
'WACC': 'Supuestos!B4', // 9.2% costo de capital ponderado
'TasaCrecimientoTerminal': 'Supuestos!B5', // 2.5% crecimiento a perpetuidad
'TasaImpositiva': 'Supuestos!B6', // 27% tasa efectiva
'PeriodoReporte': 'Supuestos!B2', // "FY2026"
'TipoCambio_USD_MXN': 'Supuestos!B9' // 17.2 al cierre de junio 2026
};
var rebuilt = 0;
for (var name in definitions) {
var parts = definitions[name].split('!');
var sheet = ss.getSheetByName(parts[0]);
if (sheet) {
ss.setNamedRange(name, sheet.getRange(parts[1]));
rebuilt++;
}
}
Logger.log('Reconstruidos ' + rebuilt + ' named ranges.');
}
El script tarda unos 3 segundos en ejecutarse. Déjalo pegado en un comentario dentro de la pestaña de Supuestos de tu plantilla, para que quien herede el modelo pueda encontrarlo.
Opción 3: copia el archivo completo y borra lo que no necesites
Si necesitas que los named ranges queden intactos, usa "Archivo > Hacer una copia" sobre toda la hoja de cálculo en lugar de extraer pestañas individuales. Después elimina las hojas que no necesitas. Menos quirúrgico, pero los named ranges, la validación de datos y las referencias entre pestañas sobreviven. Para plantillas trimestrales donde la estructura del modelo es estable y solo estás avanzando los períodos, esto suele ser más rápido que gestionar copias a nivel de pestaña.
A junio de 2026, Google Sheets no ofrece ninguna opción nativa en la interfaz para copiar named ranges junto con la operación "Copiar a". Esta limitación existe desde hace varios años y no está resuelta en la documentación actual de la Sheets API v4.
El argumento para documentar
Si estás construyendo modelos que se van a copiar (y la mayoría de los modelos de FP&A lo serán), incluye una pestaña llamada NamedRanges. Una tabla de tres columnas que mapee NombreRango → NombreHoja!Celda → Descripción tarda unos 20 minutos en construirse.
NombreRango | Celda | Descripción
WACC | Supuestos!B4 | WACC ponderado para tasa de descuento DCF
TasaCrecimientoTerminal | Supuestos!B5 | Tasa de crecimiento a perpetuidad post-proyección
TasaImpositiva | Supuestos!B6 | Tasa impositiva corporativa efectiva
TipoCambio_USD_MXN | Supuestos!B9 | Tipo de cambio de cierre mensual
PeriodoReporte | Supuestos!B2 | Etiqueta del año fiscal para encabezados
Cuando un "Copiar a" borre tus named ranges, esta tabla es tu guía de reconstrucción. Y si conectas el objeto definitions del Apps Script para que lea desde esta pestaña en lugar de estar hardcodeado, obtienes una plantilla autodocumentada que se reconstruye sola.
Una fórmula entre pestañas como =SUMIFS('P&G'!C:C,'P&G'!B:B,">="&Supuestos!$B$3) sigue funcionando sin named ranges, pero la intención queda enterrada en la dirección. Los named ranges hacen que las revisiones del modelo sean más rápidas, y las revisiones rápidas significan menos idas y vueltas con tu mesa de sindicación antes de cerrar una operación.
Preguntas frecuentes sobre named ranges y Copiar a en Google Sheets
¿Por qué Google Sheets no copia los named ranges al usar "Copiar a"? Porque los named ranges tienen alcance a nivel de archivo (spreadsheet), no de hoja individual (sheet). Al extraer una pestaña del archivo de origen, la definición del rango queda en ese archivo. Google Sheets no tiene un mecanismo nativo para acompañar el rango a través de la operación "Copiar a".
¿Qué diferencia hay entre "Hacer una copia" y "Copiar a"? "Hacer una copia" duplica todo el archivo, incluyendo named ranges, validación de datos y referencias entre pestañas. "Copiar a" traslada únicamente la hoja seleccionada a otro archivo o a una nueva hoja de cálculo, sin los named ranges.
¿Cómo sé cuáles named ranges tenía mi modelo antes de copiar? Abre el archivo de origen y ve a Datos > Rangos con nombre y protegidos. Todos los named ranges del archivo aparecen allí con sus referencias. Si construiste tu modelo sin documentarlos en una pestaña separada, esta es la única forma de verlos antes de copiar.
¿Los errores #NAME? y #REF! siempre indican named ranges rotos?
No siempre, pero después de una operación "Copiar a" son el síntoma más común de named ranges faltantes. #NAME? aparece cuando la fórmula referencia un nombre que no existe en el archivo de destino; #REF! aparece cuando la referencia apuntaba a un rango que ya no es accesible.
¿Hay un límite de named ranges por archivo en Google Sheets? Sí. La documentación de cuotas de la Sheets API v4 establece un límite de 1,000 named ranges por archivo. La mayoría de modelos financieros usa entre 8 y 30, por lo que este límite rara vez es un problema práctico.
¿Se puede automatizar la reconstrucción de named ranges sin Apps Script? No con las herramientas nativas de Google Sheets. La única alternativa sin código es documentar los rangos manualmente y recrearlos uno por uno desde Datos > Rangos con nombre y protegidos en el archivo de destino. Apps Script es la solución más eficiente para quienes hacen esta operación de manera regular.