Como extrair dados de macros no Excel / Google Sheets banner image

Implementation

How-To Guides

Como extrair dados de macros no Excel / Google Sheets

Guia passo a passo para extrair dados macroeconômicos ao vivo da FXMacroData para o Excel via Power Query ou VBA e para o Google Sheets via Apps Script com atualização automática e formatação de linha limpa.

Também disponível em English

As planilhas permanecem a ferramenta mais comum para análise macro. Quer você prefira Excel ou Google Sheets, puxar dados do banco central e indicadores econômicos ao vivo diretamente para uma célula em vez de copiar valores à mão transforma uma tabela estática em um auxílio de decisão auto-atualizado. Este guia mostra como conectar FXMacroData a ambas as plataformas: Power Query e VBA para Excel e Apps Script para Google Sheet. No final, todos os números de macro que você se importa refrescarão automaticamente sem sair da sua planilha.

O que você vai construir

  • Excel Power Query uma consulta que traz qualquer indicador para uma tabela estruturada com um clique
  • Excel VBA uma macro que escreve valores diretamente em células nomeadas, prontas para fórmulas e gráficos
  • Google Apps Script um script que escreve linhas para uma guia de folhas e atualiza em um gatilho orientado pelo tempo

Requisitos

  • Chave da API do FXMacroData Inscreva-se em / subscrever; as chaves de nível livre cobrem muitos endpoints de indicadores
  • Excel 2016+ (para Power Query) ou Excel 365/Online Power Query é incorporado no Windows/Mac e disponível online
  • Conta do Google qualquer conta com acesso a Google Sheets e Apps Script (não é necessário software adicional)
  • Familiarização básica com fórmulas do Excel ou Google Sheets sem programação de fundo necessário para a seção Power Query

PARTE 1 EXCEL

Parte 1 Excel

O Excel oferece duas rotas para dados API ao vivo: Pergunta de potência (sem código, ótimo para analistas) e VBA (conduzido por código, ideal quando é necessário escrever valores em células específicas ou desencadear lógica a partir de um botão ou evento).

- Passo 1 -

Passo 1 Compreender a forma do ponto final da API

Cada indicador FXMacroData segue o mesmo padrão REST.

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

A resposta JSON é um objeto plano com um data - Arquivo:

{
  "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 tem um date (AAAA-MM-DD), numérica val, e quando disponível um UTC de segundo nível announcement_datetime. Como todos os endpoints de indicadores compartilham esta forma, uma função Power Query ou um auxiliar VBA pode servir a todos eles. Documentação da API- Não .


- O passo 2 .

Passo 2 Excel Power Query: importação via conector Web

A Power Query está embutida. Da Web O conector pode consumir qualquer ponto final JSON REST sem código nenhum.

  1. No Excel, clique Dados → Obter dados → De outras fontes → Da Web- Não .
  2. Coloque o seu URL na caixa de diálogo substituir YOUR_API_KEY com a tua chave real:
    https://fxmacrodata.com/api/v1/announcements/usd/policy_rate?api_key=YOUR_API_KEY&start=2020-01-01
  3. Clique . Está bem.. O Power Query Navigator abre mostrando a estrutura JSON.
  4. Clique no dados registo no navegador para expandir, em seguida, clique Convertendo para Tabela - Não. Está bem.- Não .
  5. Usa o ... Expandir coluna botão (icono de seta dupla) no Column1 cabeçalho para desempacotar os registos aninhados em colunas planas: date- Não . val- Não . announcement_datetime- Não .
  6. Clique . Fechar e carregar para escrever a tabela numa nova folha.

Dica: Refazer automaticamente

Clique com o botão direito na tabela carregada → Tabela → Propriedades de dados externos → habilitar Reaproveitar dados ao abrir o arquivo e definir um Refazer a cada N minutos A sua tabela de macro permanecerá atual cada vez que você abrir a pasta de trabalho.


- Passo 3 -

Passo 3 Excel Power Query: parametrizar com uma função reutilizável

Uma vez que você tem a consulta de indicador único funcionando, promove-lo para uma função M reutilizável para que você possa puxar qualquer combinação moeda / indicador sem repetir as etapas do conector Web.

  1. No Editor de consultas, clique com o botão direito na sua consulta no painel esquerdo → Criar função- Não .
  2. Diz-me o que queres . FetchMacroData- Não .
  3. Substitua o corpo pelo código M seguinte:
// 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. Feche o editor de funções. consulta em branco para cada indicador de que necessita:
= FetchMacroData("usd", "inflation", "YOUR_API_KEY", "2022-01-01")
= FetchMacroData("eur", "policy_rate", "YOUR_API_KEY", "2022-01-01")

Cada consulta carrega em sua própria tabela. A função lida com a chamada HTTP, análise JSON, renomeamento de coluna e conversão de tipo. Para adicionar um novo indicador, adicione uma consulta em branco sem necessidade de assistente de conector. Encontre lesmas de indicador no Documentação da API para qualquer par de moedas.


- Passo 4 -

Passo 4 Excel VBA: escrever valores diretamente em células

VBA é mais adequado quando você precisa colocar valores em células nomeadas específicas, ligá-los a fórmulas existentes, ou acionar o atualização a partir de um botão ou um evento aberto de livro de trabalho.

Abra o editor VBA (Alt+F11), inserir um novo módulo (Insira → Módulo), e colar o seguinte:

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

Como ligar isto a um botão

Na folha de trabalho, vá para Insira → Formas, desenhe um retângulo arredondado, clique com o botão direito → Atribuir Macro → selecionar RefreshMacroDashboard. Um clique atualiza todos os indicadores no seu painel. Você também pode executá-lo automaticamente no arquivo aberto chamando-o de Workbook_Open() - Na ... ThisWorkbook Módulo de código.


PARTE 2 GOOGLE SHEETS

Parte 2 Google Sheets

O Google Apps Script é um runtime JavaScript incorporado diretamente no Google Workspace. Ele é executado no lado do servidor na infraestrutura do Google, então não há nada a instalar. UrlFetchApp e escrever resultados para a planilha com SpreadsheetAppOs gatilhos orientados pelo tempo permitem-lhe agendar atualizações automáticas.

- Passo 5 -

Passo 5 Abra o editor de scripts Apps

  1. Abre . folhas.google.com e criar uma nova planilha em branco.
  2. Clique . Extensões → Apps Script- Não .
  3. Renomear o projeto para FXMacroData Loader (campo superior esquerdo).
  4. Excluir o padrão myFunction() - O que é?

Guarde sua chave de API de forma segura

Vai para ... Configurações do projeto → Propriedades do script → Adicionar propriedadeAdicione uma propriedade chamada FXMACRODATA_API_KEY O código abaixo lê-lo no tempo de execução através de PropertiesService.getScriptProperties() A tua chave nunca aparece no ficheiro do script.


- O passo 6 .

Passo 6 Escreva o auxiliar de busca e o redator de folhas

Coloque o seguinte código em Code.gsAs três funções tratam de recolher, normalizar e escrever:

// ── 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);
}

- O passo 7 .

Passo 7 Execução e verificação

  1. Clique no Salvar ícone (disco floppy) na barra de ferramentas do editor.
  2. Selecione refreshMacroData na lista suspensa de funções ao lado do botão Execução (▶).
  3. Clique . Corram !. A primeira execução pede permissão para acessar a planilha e fazer solicitações HTTP externas clique Revisar permissões → Permitir- Não .
  4. Volte para a planilha. MacroData deve agora conter linhas como:
Moeda Indicador Data Valor Anúncio Data e hora
USD Taxa de política 2025-03-19 4,25 - Não, não.
USD inflação 2025-03-12 2.8 - Não, não, não.
USD desemprego 2025-03-07 4.1 - - - - Não, não, não.

- O passo 8 .

Passo 8 Agendar atualização automática com um gatilho

Um gatilho com comando do tempo chama . refreshMacroData em um horário sem qualquer ação manual.

  1. No editor de scripts Apps, clique no Ativadores ícone (relógio) na barra lateral esquerda.
  2. Clique . + Adicionar gatilho (em baixo à direita).
  3. - Está pronto . Escolha qual função executar - Não. refreshMacroData- Não .
  4. - Está pronto . Selecionar fonte de evento - Não. - Acionado pelo tempo.- Não .
  5. - Está pronto . Selecionar tipo de desencadeador baseado no tempo - Não. Temporizador de dia- Não .
  6. - Está pronto . Escolha a hora do dia → por exemplo 7h 8h (antes do European Open).
  7. Clique . SalvarO gatilho aparece na lista de gatilhos.

Dica: acionador horário para a monitorização do dia de lançamento

Em dias com lançamentos de alto impacto US CPI, NFP, ou uma decisão do banco central mude o gatilho para Temporizador de hora → a cada hora Assim, a folha captura a nova leitura assim que a API é atualizada (normalmente dentro de segundos da versão oficial). inflação E ... nóminas de não agricultores Pontos finais transportam o segundo nível announcement_datetime valores para que possa identificar exatamente quando cada leitura foi publicada.


- Passo 9 .

Passo 9 Desligue o valor mais recente para qualquer célula com uma função personalizada

Adicione a função abaixo para Code.gs se você quiser fazer referência a valores de macro diretamente em fórmulas de célula como GOOGLEFINANCE() mas para dados de bancos centrais:

/**
 * 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;
}

Depois de guardar, digite =FXMD("usd","policy_rate") Em qualquer célula. folhas chama a função, busca a partir da API, e retorna o valor atual. Combiná-lo com os rótulos de moeda em células adjacentes para construir um painel de resumo compacto.

Indicadores apoiados

Qualquer indicação do catálogo FXMacroData funciona policy_rate- Não . inflation- Não . unemployment- Não . gdp- Não . pmi- Não . retail_sales, e muitos mais. Documentação da API Para a lista completa por moeda, ou use o Painel de controlo FX Para explorar os indicadores visualmente.


- Resumo -

Resumo

Você ligou o FXMacroData ao Excel e ao Google Sheets:

  • Excel Power Query uma função M paramétrica que carrega qualquer indicador numa tabela estruturada e atualiza o ficheiro aberto.
  • Excel VBA uma macro que escreve o valor mais recente de cada indicador em células nomeadas, atribuíveis a um botão.
  • Google Apps Script - Não . refreshMacroData() função que cria uma aba completa de MacroData, mais um =FXMD() Fórmula personalizada para pesquisas por célula, ambas atualizadas automaticamente num gatilho orientado pelo tempo.

A partir daqui, considere a camada em mais indicadores por exemplo, adicionando inflação básica A inflação global está a diminuir. PMI A forma consistente do ponto final significa que cada adição é uma mudança de uma linha para o INDICATORS array ou a chamada da função M.

Blogroll