STOCKHISTORY en Excel: cómo resolver errores #CONNECT y #CALC! [agosto 2024]

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.

Índice

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:

  1. 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.
  2. Evita argumentos volátiles como HOY() o AHORA() en la prueba. Usa fechas fijas.
  3. Desactiva temporalmente gráficos y tablas dinámicas conectadas a esas salidas para reducir recálculos en cascada.
  4. Si ves #CONNECT en varios tickers a la vez, es más probable un problema de servicio o de sesión que de sintaxis.
  5. 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.
    En Mac, usa las opciones del menú Fórmulas para el mismo efecto.
  • Si utilizas conexiones o consultas, ejecuta Datos ▸ Actualizar todo.
  • Evita HOY()/AHORA() en los argumentos de STOCKHISTORY; 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:

  1. Selecciona el rango resultante.
  2. 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.

  1. Ve a Datos ▸ Obtener datos y elige tu origen: archivo CSV local, base de datos, o un servicio propio.
  2. Realiza las transformaciones mínimas: tipos de dato, nombres de columnas, filtros.
  3. Cargar enSolo crear conexión y Agregar al modelo de datos si piensas relacionar con otras tablas.
  4. 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 y LAMBDA 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

  1. Guarda y cierra otros libros pesados.
  2. En un libro nuevo, introduce una llamada mínima a STOCKHISTORY con fechas fijas.
  3. Si funciona, vuelve al libro original y cambia a cálculo manual.
  4. Consolida a una llamada por ticker y reutiliza columnas con CHOOSECOLS y INDEX.
  5. Fuerza recalculado con Ctrl+Alt+F9 y observa.
  6. Congela en valores los bloques críticos si la sesión es inestable.
  7. 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íntomaProbable causaAcción recomendada
#CONNECT en muchos tickersIntermitencia del servicio o sesiónCalcular ahora, esperar unos minutos, reabrir sesión; consolidar llamadas; fechas fijas
#CALC! con aviso de recursosMemoria o paralelismo excesivoDividir libro, cálculo manual, limitar matrices, cerrar otros procesos
Funciona en libro vacío, falla en el originalComplejidad del modeloUna llamada por ticker, reutilizar con INDEX/TAKE/DROP/CHOOSECOLS
Resultados correctos que se pierden al reabrirRecalculo al abrir y variabilidad de sesiónPegar como valores; Power Query para datos estables
Algunos tickers se recuperan tras minutosCola de servicio o retardo del clienteNo 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.

Índice