Desde el 16–27 de agosto de 2024, muchos libros con decenas o cientos de tickers empezaron a devolver #CONNECT y, a veces, #CALC! al usar STOCKHISTORY. Aquí tienes un análisis claro, un plan de diagnóstico y soluciones prácticas para estabilizar tus modelos sin pausar tu trabajo.
Qué está pasando con STOCKHISTORY
STOCKHISTORY obtiene series históricas desde un servicio externo integrado en Excel. Durante el periodo mencionado se observó un fallo intermitente en la obtención y recálculo de datos que no dependía de la sintaxis de la fórmula. El comportamiento fue aleatorio por ticker y por sesión: lo que funcionaba al guardar y cerrar podía fallar al reabrir.
Los síntomas más frecuentes fueron:
- #CONNECT: Excel no logra establecer o mantener la conexión con el servicio de datos.
- #CALC!: error de cálculo o desbordamiento de matriz (en este contexto, a menudo relacionado con presión de recursos o estados transitorios del cliente).
- Mensajes como “Excel ran out of resources…”, especialmente en libros grandes o con muchas matrices dinámicas.
- Recuperación parcial tras esperar varios minutos o tras reescribir/copiar la fórmula a un libro nuevo.
Según los reportes, hubo mejoras alrededor del 23 de agosto, con casos residuales hasta el 27, destacando incidencias en instalaciones con versión 2408.
Diagnóstico rápido y señales de alerta
Antes de tocar todo el modelo, aísla si el problema es de servicio o de fórmula:
- Prueba con una fórmula mínima en una hoja nueva:
=STOCKHISTORY("MSFT", FECHA(2024,8,1), FECHA(2024,8,16))
Si devuelve datos aquí pero no en tu libro, el problema es de carga y recálculo del archivo original. - Evita argumentos volátiles como
HOY()
oAHORA()
en la prueba. Usa fechas fijas. - Desactiva temporalmente gráficos y tablas dinámicas conectadas a esas salidas para reducir recálculos en cascada.
- Si ves #CONNECT en varios tickers a la vez, es más probable un problema de servicio o de sesión que de sintaxis.
- Si aparece #CALC! junto a advertencias de recursos, tu limitante es memoria o paralelismo excesivo.
Acciones inmediatas que funcionan
Forzar actualización controlada
- Usa Fórmulas ▸ Calcular ahora para recalcular de forma puntual. Accesos rápidos típicos en Windows:
- F9: recalcula lo necesario en los libros abiertos.
- Mayús+F9: recalcula la hoja activa.
- Ctrl+Alt+F9: recalcula todo forzando evaluación completa.
- Ctrl+Alt+Mayús+F9: reconstruye dependencias y recalcula todo.
- Si utilizas conexiones o consultas, ejecuta Datos ▸ Actualizar todo.
- Evita
HOY()
/AHORA()
en los argumentos deSTOCKHISTORY
; fechas fijas reducen recálculos involuntarios.
Reducir llamadas simultáneas
Consolidar una única llamada por ticker y reutilizar el resultado es la palanca más eficaz para estabilizar y acelerar:
=LET(
tkr, "AAPL",
f1, FECHA(2024,8,1),
f2, FECHA(2024,8,16),
hist, STOCKHISTORY(tkr, f1, f2),
CHOOSECOLS(hist, 1, 2) )
La matriz hist
ya contiene fecha y cierre. Si necesitas la última fila:
=LET(hist, STOCKHISTORY("AAPL", FECHA(2024,8,1), FECHA(2024,8,16)),
TAKE(hist, -1))
Si el modelo repetía STOCKHISTORY
decenas de veces para extraer columnas distintas, reemplázalo por CHOOSECOLS
, INDEX
, TAKE
y DROP
sobre la misma matriz.
Estabilizar resultados críticos
Cuando obtengas un resultado correcto en un cálculo clave, congélalo:
- Selecciona el rango resultante.
- Inicio ▸ Copiar y luego Inicio ▸ Pegado especial ▸ Valores (acceso rápido: Ctrl+C y luego Ctrl+Alt+V, V en Windows).
Esto evita que se reevalúe durante la incidencia. Documenta la fecha y origen para poder refrescar cuando el servicio esté estable.
Control de cálculo
Coloca el libro en cálculo manual mientras trabajas en edición pesada:
- Fórmulas ▸ Opciones de cálculo ▸ Manual.
- Activa Calcular ahora solo cuando desees actualizar.
- Considera Automático excepto tablas de datos si usas muchas tablas de datos.
Otra vía de datos controlable
Para procesos que requieren estabilidad durante la incidencia, usa Power Query para traer las series y que tus fórmulas lean de esa tabla. Power Query se actualiza bajo demanda y no en cada recálculo general.
Mitigar el error de recursos
- Divide el libro en módulos por sector, periodo o frecuencia. Abre solo lo que necesitas.
- Sustituye referencias de columna completa por rangos acotados o tablas estructuradas.
- Reduce el tamaño de matrices intermedias con
TAKE
,DROP
y filtros. - Cierra otros libros y aplicaciones pesadas mientras recalculas.
Cliente y versión
Comprueba tu versión en Archivo ▸ Cuenta. Si estás en la compilación 2408 y sigues viendo inestabilidad, actualiza a la compilación más reciente disponible para tu canal o vuelve temporalmente a una anterior más estable según tus políticas. Probar Excel para la Web ayuda a aislar si el problema es del cliente de escritorio.
Comunicar la incidencia
Usa Ayuda ▸ Comentarios ▸ No me gusta algo para enviar telemetría y contexto al equipo de Excel. Incluye capturas y pasos para reproducir.
Guía para consolidar una única llamada por ticker
Un patrón robusto es encapsular la llamada a STOCKHISTORY
en una fórmula con LET
y reutilizar su matriz en toda la hoja:
=LET(
tkr, A2,
ini, $B$1,
fin, $B$2,
base, STOCKHISTORY(tkr, ini, fin),
fechas, CHOOSECOLS(base,1),
cierres, CHOOSECOLS(base,2),
HSTACK(fechas, cierres)
)
Con esto puedes:
- Tomar el cierre más reciente:
=INDEX(cierres, FILAS(cierres))
- Filtrar por rango:
=FILTER(HSTACK(fechas,cierres), (fechas>=ini)*(fechas<=fin))
- Construir métricas sin nuevas llamadas: medias móviles, rendimientos, máximos y mínimos.
Si necesitas varios campos (apertura, máximo, mínimo, volumen), pídelo todo una vez y selecciona columnas:
=LET(
base, STOCKHISTORY("MSFT", FECHA(2024,8,1), FECHA(2024,8,16), 0, 1, 0,1,2,3,4,5),
fechas, CHOOSECOLS(base,1),
apertura, CHOOSECOLS(base,3),
maximo, CHOOSECOLS(base,4),
minimo, CHOOSECOLS(base,5),
cierre, CHOOSECOLS(base,2),
volumen, CHOOSECOLS(base,6),
HSTACK(fechas, apertura, maximo, minimo, cierre, volumen)
)
Nota: el orden de columnas depende de los argumentos solicitados; valida con un pequeño conjunto antes de extender.
Estrategia con Power Query para datos históricos estables
Power Query separa la actualización de datos del cálculo. Tu flujo queda así: Power Query trae la tabla histórica a demanda y las fórmulas consumen esa tabla sin llamar al servicio de STOCKHISTORY
en cada recálculo.
- Ve a Datos ▸ Obtener datos y elige tu origen: archivo CSV local, base de datos, o un servicio propio.
- Realiza las transformaciones mínimas: tipos de dato, nombres de columnas, filtros.
- Cargar en ➜ Solo crear conexión y Agregar al modelo de datos si piensas relacionar con otras tablas.
- Usa una tabla estructurada como hechos y crea medidas y reportes encima.
Ejemplo de pseudocódigo M para CSV local (ajusta ruta y nombres a tu entorno):
let
Origen = Csv.Document(
File.Contents("C:\Datos\historicos\AAPL.csv"),
[Delimiter=",", Encoding=65001, QuoteStyle=QuoteStyle.Csv]
),
Promocionar = Table.PromoteHeaders(Origen, [PromoteAllScalars=true]),
Tipos = Table.TransformColumnTypes(Promocionar,{
{"Date", type date},
{"Open", type number},
{"High", type number},
{"Low", type number},
{"Close", type number},
{"Volume", Int64.Type}
})
in
Tipos
Desde la hoja, referencia esa tabla con XLOOKUP
, FILTER
y similares. Cuando necesites actualizar, ejecuta Datos ▸ Actualizar todo y la lógica de cálculo no se recalculará de forma innecesaria.
Buenas prácticas para modelos con muchos tickers
- Arquitectura en capas: capa de adquisición (una llamada por ticker o consulta por fuente), capa de lógica (cálculos), capa de presentación (tablas y gráficos).
- Tablas estructuradas en lugar de rangos sueltos. Mejoran legibilidad y evitan referencias de columna completa.
- Parámetros centrales: fechas de inicio y fin en celdas únicas; fórmulas y consultas referenciando esas celdas.
- Nombres definidos con
LET
yLAMBDA
para encapsular lógica repetida. - Evitar volatilidad innecesaria: sustituye
HOY()
/AHORA()
por fechas controladas; usa botones de actualización. - Limitación del periodo: pide solo lo que necesitas; un año de datos cuando vas a calcular variaciones de un mes no tiene sentido.
- Registro de actualizaciones: guarda la fecha y fuente de cada congelamiento de valores para auditoría.
Preguntas frecuentes
¿Es volátil STOCKHISTORY?
No es volátil en el sentido clásico, pero su resultado depende de un servicio externo y se recalcula al abrir el libro o en recálculos generales. No existe un comando para “actualizar solo esta función”. Controla con cálculo manual, fechas fijas, consolidación de llamadas y, si es crítico, Power Query.
¿Puedo actualizar sin poner todo el libro en manual?
No hay control por función en fórmulas. Las alternativas son: usar Power Query para actualizar bajo demanda, o pegar valores cuando tengas el resultado correcto.
¿Qué diferencia hay entre #CONNECT y #CALC! en este contexto?
#CONNECT apunta a problemas de conexión al servicio de datos. #CALC! suele indicar que la matriz no pudo calcularse o “derramarse”, y a menudo se manifiesta cuando el cliente se queda sin recursos o la dependencia aún no responde.
¿Cómo sé si el problema es de servicio?
Prueba una fórmula mínima en una hoja nueva con fechas fijas. Si falla en varios tickers al mismo tiempo y, tras minutos, algunos se recuperan sin cambios de tu parte, apunta a servicio/sesión. Si solo falla en tu libro pesado pero la misma fórmula funciona en uno vacío, apunta a recálculo y recursos.
Procedimiento de diagnóstico en pocos minutos
- Guarda y cierra otros libros pesados.
- En un libro nuevo, introduce una llamada mínima a
STOCKHISTORY
con fechas fijas. - Si funciona, vuelve al libro original y cambia a cálculo manual.
- Consolida a una llamada por ticker y reutiliza columnas con
CHOOSECOLS
yINDEX
. - Fuerza recalculado con Ctrl+Alt+F9 y observa.
- Congela en valores los bloques críticos si la sesión es inestable.
- Si persiste, migra la ingestión temporalmente a Power Query.
Estado del incidente en agosto de dos mil veinticuatro
- Dieciocho a veintiuno de agosto: fallo generalizado.
- Veintitrés de agosto: varios usuarios reportan recuperación.
- Veinticinco a veintisiete de agosto: casos persistentes con #CONNECT/#CALC! y avisos de recursos, sobre todo en libros grandes y en instalaciones con versión dos mil cuatrocientos ocho.
Si tu proceso es sensible, aplica los workarounds de este artículo y mantiene actualizado el cliente. Power Query y el pegado de valores son tus mejores aliados para garantizar continuidad.
Tabla de decisión rápida
Síntoma | Probable causa | Acción recomendada |
---|---|---|
#CONNECT en muchos tickers | Intermitencia del servicio o sesión | Calcular ahora, esperar unos minutos, reabrir sesión; consolidar llamadas; fechas fijas |
#CALC! con aviso de recursos | Memoria o paralelismo excesivo | Dividir libro, cálculo manual, limitar matrices, cerrar otros procesos |
Funciona en libro vacío, falla en el original | Complejidad del modelo | Una llamada por ticker, reutilizar con INDEX/TAKE/DROP/CHOOSECOLS |
Resultados correctos que se pierden al reabrir | Recalculo al abrir y variabilidad de sesión | Pegar como valores; Power Query para datos estables |
Algunos tickers se recuperan tras minutos | Cola de servicio o retardo del cliente | No insistir con llamadas masivas; cálculo manual y actualizaciones puntuales |
Apéndice con macros seguras y opcionales
Si tu organización permite VBA, dos macros útiles para acelerar tareas comunes:
Congelar valores en la selección
Sub CongelarValores()
If TypeName(Selection) = "Range" Then
Selection.Value = Selection.Value
End If
End Sub
Recalcular forzando reconstrucción
Sub RecalculoForzado()
Application.CalculateFullRebuild
End Sub
Asocia estas macros a botones en la cinta personalizada para que el equipo pueda estabilizar resultados y forzar un recálculo solo cuando lo necesite.
Conclusiones y recomendación
La combinación de fallos intermitentes del servicio y carga de recálculo en libros grandes explica los errores #CONNECT y #CALC! reportados en la segunda mitad de agosto de dos mil veinticuatro. Más allá de esperar correcciones del lado del servicio, lo que sí está en tu control es:
- Consolidar a una llamada por ticker y reutilizar sus columnas.
- Evitar argumentos volátiles y trabajar con cálculo manual cuando convenga.
- Pegar como valores los bloques críticos para conservar resultados.
- Externalizar la ingestión a Power Query para un flujo de actualización bajo demanda.
- Reducir la presión de recursos dividiendo el modelo y acotando matrices.
Con estas prácticas, tus libros seguirán entregando valor aunque el servicio de STOCKHISTORY
tenga altibajos temporales. Cuando la plataforma se estabilice, podrás volver a la actualización automática completa con un riesgo operativo mucho menor.