Cómo extraer datos de macros en Excel / Hojas de cálculo de Google banner image

Implementation

How-To Guides

Cómo extraer datos de macros en Excel / Hojas de cálculo de Google

Guía paso a paso para extraer datos macroeconómicos en vivo de FXMacroData a Excel a través de Power Query o VBA, y en Hojas de cálculo de Google a través del Apps Script con actualización automática y formato de fila limpio.

Disponible también en English

Las hojas de cálculo siguen siendo la herramienta más común para el análisis macro. Ya sea que prefiera Excel o Google Sheets, extraer datos en vivo del banco central y indicadores económicos directamente en una celda en lugar de copiar valores a mano convierte una tabla estática en una ayuda para la decisión de auto-actualización. Esta guía le muestra cómo conectar FXMacroData a ambas plataformas: Power Query y VBA para Excel, y Apps Script para Google Sheet. Al final, cada número de macro que le interese se actualizará automáticamente sin salir de su hoja de cálculo.

Lo que construirás

  • Cuestionario de potencia de Excel una consulta que requiere cualquier indicador en una tabla estructurada con un solo clic
  • Excel VBA también una macro que escribe valores directamente en celdas con nombre, lista para fórmulas y gráficos
  • El guión de Google Apps un script que escribe filas a una pestaña de hojas y actualiza en un activador de tiempo

Los requisitos previos

  • La clave de la API de FXMacroData inscribirse en / suscribirse; las claves de nivel libre cubren muchos puntos finales de los indicadores
  • Excel 2016+ también (para Power Query) o Excel 365/En línea Power Query está integrado en Windows/Mac y está disponible en línea
  • Cuenta de Google cualquier cuenta con acceso a Google Sheets y Apps Script (no se requiere software adicional)
  • Familiaridad básica con las fórmulas de Excel o Hojas de Google no se necesita experiencia en programación para la sección Power Query

PARTE 1 Excel

Parte 1 Excel

Excel ofrece dos rutas para los datos de API en vivo: Cuestión de potencia (sin código, genial para los analistas) y VBA (conducido por código, mejor cuando se necesitan escribir valores en celdas específicas o activar la lógica de un botón o evento).

- ¿ Qué pasa ?

Paso 1 Comprender la forma del punto final de la API

Cada indicador FXMacroData sigue el mismo patrón REST.

GET https://fxmacrodata.com/api/v1/announcements/usd/policy_rate?api_key=YOUR_API_KEY&start=2020-01-01

La respuesta JSON es un objeto plano con un data - ¿ Qué ?

{
  "data": [
    { "date": "2025-03-19", "val": 4.25, "announcement_datetime": "2025-03-19T18:00:00Z" },
    { "date": "2025-01-29", "val": 4.25, "announcement_datetime": "2025-01-29T19:00:00Z" },
    { "date": "2024-12-18", "val": 4.25, "announcement_datetime": "2024-12-18T19:00:00Z" }
  ]
}

Cada disco lleva un date (Año Año A-MM-DD), un número val, y cuando esté disponible un segundo nivel UTC announcement_datetime. Debido a que todos los puntos finales de indicadores comparten esta forma, una función de Power Query o un ayudante VBA puede servir a todos ellos. Documento de la API- ¿ Qué ?


- ¿ Qué pasa ?

Paso 2 Excel Power Query: importación a través del conector web

La consulta de energía está incorporada. De la web conector puede consumir cualquier punto final JSON REST sin código en absoluto.

  1. En Excel, haga clic en Datos → Obtener datos → De otras fuentes → De la web- ¿ Qué ?
  2. Pegar su URL en el diálogo reemplazar YOUR_API_KEY con su llave real:
    https://fxmacrodata.com/api/v1/announcements/usd/policy_rate?api_key=YOUR_API_KEY&start=2020-01-01
  3. Haga clic Está bien.. Power Query Navigator se abre mostrando la estructura JSON.
  4. Haga clic en el datos Registro en el navegador para expandirlo, luego haga clic en Conversión a tabla ¿ Qué pasa? Está bien.- ¿ Qué ?
  5. Usa el Extensión de la columna botón (icono de doble flecha) en el Column1 Cabecera para desempaquetar los registros anidados en columnas planas: date¿ Qué ? val¿ Qué ? announcement_datetime- ¿ Qué ?
  6. Haga clic Cierre y carga Para escribir la mesa en una nueva hoja.

Consejo: Actualizar automáticamente

Haga clic derecho en la tabla cargada → Tabla → Propiedades de datos externos → habilitar Actualizar datos al abrir el archivo y fijar un Reactualizar cada N minutos La tabla de macros se mantendrá actualizada cada vez que abra el libro de trabajo.


- ¿ Qué pasa ?

Paso 3 Excel Power Query: parametrizar con una función reutilizable

Una vez que tenga la consulta de un solo indicador funcionando, promueva a una función M reutilizable para que pueda extraer cualquier combinación de moneda / indicador sin repetir los pasos del conector web.

  1. En el Editor de consultas, haga clic derecho en su consulta en el panel izquierdo → Crear una función- ¿ Qué ?
  2. ¿ Qué quieres decir ? FetchMacroData- ¿ Qué ?
  3. Se sustituye el cuerpo por el código M siguiente:
// FetchMacroData — reusable Power Query function
// Parameters: currency (e.g. "usd"), indicator (e.g. "policy_rate"), apiKey, startDate
(currency as text, indicator as text, apiKey as text, startDate as text) =>
let
    url     = "https://fxmacrodata.com/api/v1/announcements/"
              & currency & "/" & indicator
              & "?api_key=" & apiKey
              & "&start=" & startDate,
    raw     = Json.Document(Web.Contents(url)),
    records = raw[data],
    tbl     = Table.FromList(records, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
    expand  = Table.ExpandRecordColumn(tbl, "Column1",
                {"date", "val", "announcement_datetime"},
                {"Date", "Value", "AnnouncementDatetime"}),
    typed   = Table.TransformColumnTypes(expand, {
                {"Date",  type date},
                {"Value", type number}
              })
in
    typed
  1. Cierra el editor de funciones. Ahora crea una nueva consulta en blanco para cada indicador que necesite:
= FetchMacroData("usd", "inflation", "YOUR_API_KEY", "2022-01-01")
= FetchMacroData("eur", "policy_rate", "YOUR_API_KEY", "2022-01-01")

Cada consulta se carga en su propia tabla. La función maneja la llamada HTTP, el análisis JSON, el cambio de nombre de columna y la conversión de tipo. Para agregar un nuevo indicador, añada una consulta en blanco sin necesidad de asistente de conector. Encuentre las babosas de indicador en el Documento de la API para cualquier par de divisas.


- ¿ Qué pasa ?

Paso 4 Excel VBA: escribir valores directamente en las celdas

VBA es más adecuado cuando se necesitan colocar valores en celdas específicas con nombre, vincularlos a fórmulas existentes, o activar la actualización desde un botón o un evento de libro abierto.

Abre el editor de VBA (Alt+F11), se inserta un nuevo módulo (Insertar → módulo), y pegar lo siguiente:

Option Explicit

' ─────────────────────────────────────────────────────────────────
' FetchLatestIndicator
' Returns the most recent val for a given currency/indicator.
' Requires a reference to "Microsoft XML, v6.0" (VBA Editor →
' Tools → References → tick "Microsoft XML, v6.0").
' ─────────────────────────────────────────────────────────────────
Function FetchLatestIndicator(currency As String, indicator As String, _
                               apiKey As String) As Variant
    Dim http     As New MSXML2.XMLHTTP60
    Dim url      As String
    Dim json     As String
    Dim dataArr  As Variant
    Dim parsed   As Object

    url = "https://fxmacrodata.com/api/v1/announcements/" & _
          LCase(currency) & "/" & LCase(indicator) & _
          "?api_key=" & apiKey & "&limit=1"

    http.Open "GET", url, False
    http.setRequestHeader "Accept", "application/json"
    http.Send

    If http.Status <> 200 Then
        FetchLatestIndicator = CVErr(xlErrValue)
        Exit Function
    End If

    ' ── Minimal JSON parser (no external library needed) ──────────
    ' Locate the first "val": number pattern after "data":[{
    Dim pos     As Long
    Dim valStr  As String
    json = http.responseText
    pos  = InStr(json, """val"":")
    If pos = 0 Then
        FetchLatestIndicator = CVErr(xlErrNA)
        Exit Function
    End If
    pos    = pos + Len("""val"":")
    valStr = Mid(json, pos, 20)
    ' Trim to the actual number (stop at comma, space, or brace)
    valStr = Split(Trim(valStr), ",")(0)
    valStr = Split(valStr, "}")(0)
    valStr = Trim(valStr)
    FetchLatestIndicator = CDbl(valStr)
End Function


' ─────────────────────────────────────────────────────────────────
' RefreshMacroDashboard
' Writes the latest value of several indicators into named cells.
' Define Named Ranges (Formulas → Name Manager) matching the keys
' used in the pairs array below.
' ─────────────────────────────────────────────────────────────────
Sub RefreshMacroDashboard()
    Dim apiKey As String
    apiKey = "YOUR_API_KEY"   ' ← replace with your key

    Dim pairs(5, 1) As String
    pairs(0, 0) = "usd" : pairs(0, 1) = "policy_rate"
    pairs(1, 0) = "eur" : pairs(1, 1) = "policy_rate"
    pairs(2, 0) = "gbp" : pairs(2, 1) = "policy_rate"
    pairs(3, 0) = "usd" : pairs(3, 1) = "inflation"
    pairs(4, 0) = "usd" : pairs(4, 1) = "unemployment"
    pairs(5, 0) = "usd" : pairs(5, 1) = "gdp"

    Dim i   As Integer
    Dim val As Variant
    Dim nm  As String
    For i = 0 To 5
        val = FetchLatestIndicator(pairs(i, 0), pairs(i, 1), apiKey)
        nm  = UCase(pairs(i, 0)) & "_" & pairs(i, 1)
        On Error Resume Next
        ThisWorkbook.Names(nm).RefersToRange.Value = val
        On Error GoTo 0
    Next i

    MsgBox "Dashboard updated — " & Now(), vbInformation, "FXMacroData"
End Sub

Cómo conectar esto a un botón

En la hoja de trabajo, vaya a Insertar → Formas, dibuja un rectángulo redondeado, haz clic derecho → Asignar una macro → seleccionar RefreshMacroDashboard. Un clic actualiza todos los indicadores en su panel. También puede ejecutarlo automáticamente en el archivo abierto llamándolo desde Workbook_Open() En el ThisWorkbook módulo de código.


PARTE 2 Hojas de Google

Parte 2 Hojas de Google

Google Apps Script es un tiempo de ejecución JavaScript incrustado directamente en Google Workspace. Se ejecuta en el lado del servidor en la infraestructura de Google, por lo que no hay nada que instalar. Llama a FXMacroData a través de UrlFetchApp y escribe los resultados en la hoja de cálculo con SpreadsheetAppLos activadores basados en el tiempo te permiten programar actualizaciones automáticas.

- ¿ Qué pasa ?

Paso 5 Abra el editor de guiones de Apps

  1. Abierto . Las páginas. google. com y crear una nueva hoja de cálculo en blanco.
  2. Haga clic Extensiones → Aplicaciones- ¿ Qué ?
  3. Renombrar el proyecto a El cargador de FXMacroData (campo superior izquierdo).
  4. Elimina el valor predeterminado . myFunction() el marcador de posición.

Guarde su clave de API de forma segura

Ve a donde ... Configuración del proyecto → Propiedades del script → Añadir propiedadAñadir una propiedad llamada FXMACRODATA_API_KEY El código de abajo lo lee en tiempo de ejecución a través de PropertiesService.getScriptProperties() su llave nunca aparece en el archivo de guión.


- ¿ Qué pasa ?

Paso 6 Escriba el ayudante de búsqueda y el escritor de hojas

Pegar el siguiente código en Code.gsLas tres funciones se encargan de buscar, normalizar y escribir:

// ── Config ──────────────────────────────────────────────────────
const BASE_URL = 'https://fxmacrodata.com/api/v1';

// List of {currency, indicator} pairs to load.
// Add or remove rows to customise your dashboard.
const INDICATORS = [
  { currency: 'usd', indicator: 'policy_rate'  },
  { currency: 'usd', indicator: 'inflation'    },
  { currency: 'usd', indicator: 'unemployment' },
  { currency: 'eur', indicator: 'policy_rate'  },
  { currency: 'gbp', indicator: 'policy_rate'  },
  { currency: 'aud', indicator: 'policy_rate'  },
];


// ── Fetch helper with retry ─────────────────────────────────────
/**
 * Fetches the latest N records for a currency/indicator pair.
 * Retries up to maxRetries times with exponential back-off.
 *
 * @param {string} currency   - e.g. 'usd'
 * @param {string} indicator  - e.g. 'policy_rate'
 * @param {string} apiKey
 * @param {number} limit      - number of records to return (default 12)
 * @param {number} maxRetries
 * @returns {Array} array of {date, val, announcement_datetime} objects
 */
function fetchIndicator(currency, indicator, apiKey, limit = 12, maxRetries = 3) {
  const url = `${BASE_URL}/announcements/${currency}/${indicator}`
            + `?api_key=${apiKey}&limit=${limit}`;

  for (let attempt = 0; attempt < maxRetries; attempt++) {
    try {
      const resp = UrlFetchApp.fetch(url, { muteHttpExceptions: true });
      if (resp.getResponseCode() === 200) {
        return JSON.parse(resp.getContentText()).data || [];
      }
    } catch (e) {
      if (attempt < maxRetries - 1) {
        Utilities.sleep(Math.pow(2, attempt) * 1000); // 1 s, 2 s, 4 s
      }
    }
  }
  return [];
}


// ── Sheet writer ────────────────────────────────────────────────
/**
 * Writes all indicator rows to a sheet named 'MacroData'.
 * Creates the sheet if it does not exist; clears it on each run
 * so stale rows are removed.
 */
function refreshMacroData() {
  const apiKey = PropertiesService.getScriptProperties()
                                  .getProperty('FXMACRODATA_API_KEY');
  if (!apiKey) {
    throw new Error('FXMACRODATA_API_KEY script property is not set.');
  }

  const ss        = SpreadsheetApp.getActiveSpreadsheet();
  let   sheet     = ss.getSheetByName('MacroData');
  if (!sheet) {
    sheet = ss.insertSheet('MacroData');
  }
  sheet.clearContents();

  // Header row
  const headers = ['Currency', 'Indicator', 'Date', 'Value', 'AnnouncementDatetime'];
  sheet.appendRow(headers);

  // Style header
  const headerRange = sheet.getRange(1, 1, 1, headers.length);
  headerRange.setBackground('#1e3a5f');
  headerRange.setFontColor('#ffffff');
  headerRange.setFontWeight('bold');

  // Data rows
  INDICATORS.forEach(({ currency, indicator }) => {
    const records = fetchIndicator(currency, indicator, apiKey);
    records.forEach(r => {
      sheet.appendRow([
        currency.toUpperCase(),
        indicator,
        r.date,
        r.val,
        r.announcement_datetime || ''
      ]);
    });
  });

  // Auto-resize columns for readability
  sheet.autoResizeColumns(1, headers.length);
}

- ¿ Qué pasa ?

Paso 7 Ejecutar y verificar

  1. Haga clic en el Salvar icono (disco) en la barra de herramientas del editor.
  2. Selecciona refreshMacroData en el menú desplegable de funciones junto al botón Ejecutar (▶).
  3. Haga clic ¡Corre!. La primera ejecución pide permiso para acceder a la hoja de cálculo y hacer solicitudes HTTP externas haga clic Revisa permisos → Permite- ¿ Qué ?
  4. Vuelve a la hoja de cálculo. MacroDatos Ahora debe contener filas como:
Cuota de mercado Indicador El día Valor Anuncio fecha hora
El precio de exportación Tasa de interés El año 2025-03-19 4.25 El año de la muerte de la mujer
El precio de exportación la inflación El 12 de marzo de 2025 2.8 El año pasado, el gobierno de Estados Unidos
El precio de exportación el desempleo El año 2025-03-07 4.1 El El año es el año de la muerte.

- ¿ Qué pasa ?

Paso 8 Programe la actualización automática con un disparador

Un gatillo controlado por el tiempo llama . refreshMacroData en un horario sin ninguna acción manual.

  1. En el editor de scripts de Apps, haga clic en el Activadores icono (reloj) en la barra lateral izquierda.
  2. Haga clic + Añadir activador (abajo a la derecha).
  3. Ya está . Elige qué función ejecutar ¿ Qué pasa? refreshMacroData- ¿ Qué ?
  4. Ya está . Seleccionar el origen del evento ¿ Qué pasa? El tiempo- ¿ Qué ?
  5. Ya está . Seleccionar el tipo de activación basada en el tiempo ¿ Qué pasa? Tiempo de día- ¿ Qué ?
  6. Ya está . Seleccione la hora del día → por ejemplo 7am 8am (antes del Abierto Europeo).
  7. Haga clic SalvarEl gatillo aparece en la lista de gatillos.

Consejo: activación por hora para la vigilancia del día de la liberación

En los días con grandes cambios US CPI, NFP, o una decisión del banco central cambia el gatillo a Temporizador de hora → cada hora Así que la hoja captura la nueva lectura tan pronto como la API se actualiza (normalmente a los segundos de la versión oficial). la inflación ¿ Qué ? nóminas de los trabajadores no agrícolas los puntos finales llevan el segundo nivel announcement_datetime valores para que pueda determinar exactamente cuándo se publicó cada lectura.


- ¿ Qué pasa ?

Paso 9 Introduzca el valor más reciente en cualquier celda con una función personalizada

Añadir la función de abajo a Code.gs si quieres hacer referencia a los valores de macro directamente en fórmulas de celda como GOOGLEFINANCE() pero para los datos de los bancos centrales:

/**
 * Custom Sheets function: returns the latest value for a currency/indicator.
 *
 * Usage in a cell:  =FXMD("usd","policy_rate")
 *
 * @param {string} currency   e.g. "usd"
 * @param {string} indicator  e.g. "policy_rate"
 * @customfunction
 */
function FXMD(currency, indicator) {
  const apiKey  = PropertiesService.getScriptProperties()
                                   .getProperty('FXMACRODATA_API_KEY');
  const records = fetchIndicator(currency, indicator, apiKey, 1);
  if (!records || records.length === 0) return null;
  return records[0].val;
}

Después de guardar, escriba =FXMD("usd","policy_rate") En cualquier celda. Las hojas llaman a la función, buscan el valor actual en la API y lo devuelven. Combínalo con las etiquetas de moneda en las celdas adyacentes para construir un panel de resumen compacto.

Indicadores apoyados

Cualquier slug de indicador del catálogo FXMacroData funciona policy_rate¿ Qué ? inflation¿ Qué ? unemployment¿ Qué ? gdp¿ Qué ? pmi¿ Qué ? retail_sales, y muchos más. Documento de la API para la lista completa por moneda, o utilizar el Cuadro de control de divisas Para explorar los indicadores visualmente.


- Resumen -

Resumen de las actividades

Ha conectado FXMacroData tanto a Excel como a Google Sheets:

  • Cuestionario de potencia de Excel una función M parametrizable que carga cualquier indicador en una tabla estructurada y actualiza el archivo abierto.
  • Excel VBA también una macro que escribe el último valor de cada indicador en celdas con nombre, asignable a un botón.
  • El guión de Google Apps ¿ Qué es eso ? refreshMacroData() función que crea una pestaña completa de MacroData, más un =FXMD() fórmula personalizada para búsquedas por celda, ambas actualizadas automáticamente en un disparador basado en el tiempo.

A partir de aquí, considere la capa en más indicadores por ejemplo, añadiendo inflación de base junto con la inflación global, o tirando PMI La forma consistente del punto final significa que cada adición es un cambio de una línea en el INDICATORS la función M.

Blogroll