Masz pytania lub problemy? Napisz w GitHub Discussions.

Google Sheets ma funkcję GOOGLEFINANCE do kursów walut i do szybkiego przeliczenia w zupełności wystarcza. Haczyk tkwi w źródle: anonimowy rynkowy kurs uśredniony, którego nie możesz ani sprawdzić, ani wybrać. Frankfurter uśrednia kursy banków centralnych, które możesz sprawdzić. Jeśli źródło musi być wiążące, wybierasz konkretną instytucję: kurs EBC dla unijnego VAT, NBP czy brazylijski PTAX. Historia wybranego dostawcy pozostaje taka, jak została opublikowana. Poniższe formuły pasują wszędzie tam, gdzie używasz GOOGLEFINANCE.

Szybki start

Nie wymaga konfiguracji ani klucza API. Wstaw bieżący kurs za pomocą funkcji IMPORTDATA i endpointu CSV do komórki:

=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur")

Google Sheets wypełni tabelę kolumnami date,base,quote,rate. Kolumna date początkowo pojawi się jako liczba seryjna. Zaznacz ją i wybierz Formatuj, Liczba, Data, aby wyświetlić ją czytelnie. Wiele walut docelowych pobierzesz rozdzielając je przecinkami:

=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur,gbp,jpy")

Przeliczanie kwoty

IMPORTDATA zwraca kurs, a nie przeliczoną kwotę całkowitą. Pomnóż swoją kwotę przez komórkę z zaimportowanym kursem lub skorzystaj z poniższej funkcji niestandardowej.

Funkcja niestandardowa

Aby stworzyć funkcję wielokrotnego użytku =FRANKFURTER(), wystarczy krótki skrypt Apps Script. Otwórz w arkuszu Rozszerzenia, Apps Script, wklej ten kod i zapisz:

/**
 * Przelicza kwotę między walutami po dzisiejszym kursie lub kursie z podanej daty.
 * @customfunction
 */
function FRANKFURTER(amount, from, to, date) {
  let url = `https://api.frankfurter.dev/v2/rate/${from}/${to}`;
  if (date) {
    const tz = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
    url += `?date=${Utilities.formatDate(date, tz, "yyyy-MM-dd")}`;
  }
  const data = JSON.parse(UrlFetchApp.fetch(url).getContentText());
  return amount * data.rate;
}

Następnie wywołaj ją w dowolnej komórce:

=FRANKFURTER(100, "usd", "eur")

Podaj datę, aby pobrać kurs historyczny:

=FRANKFURTER(100, "usd", "eur", DATE(2020, 1, 2))

Wybór oficjalnego źródła

Domyślnie otrzymujesz kurs uśredniony ze wszystkich źródeł. Dodaj parametr providers, aby wybrać konkretną instytucję. Ma to kluczowe znaczenie dla podatków i księgowości: wiele organów podatkowych wymaga stosowania kursu własnego banku centralnego.

=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur&providers=ecb")
ECB
Kurs referencyjny Europejskiego Banku Centralnego, standard dla unijnego podatku VAT i ceł.
NBP
Narodowy Bank Polski. Rozliczenia podatku VAT i dochodowego w Polsce wymagają kursu NBP.
CNB
Czeski Bank Narodowy, referencja dla czeskiej księgowości i podatków.
BCB
Banco Central do Brasil PTAX, referencja dla brazylijskich umów i podatków.
BANXICO
Kurs FIX Banco de México do regulowania zobowiązań w dolarach amerykańskich.

Zobacz wszystkie źródła. Wybrana instytucja działa według własnego harmonogramu publikacji, dlatego jej najnowszy kurs może być opóźniony o jeden dzień w stosunku do kursu łączonego.

Szeregi historyczne

Użyj from dla zakresu dat oraz group=month, aby zagregować dane do 1 wiersza na miesiąc, gotowego do wykresów. Historia kursów uśrednionych może się nieznacznie zmienić, gdy napływają nowe dane. Gdy wartości muszą pozostać stałe, wybierz konkretnego dostawcę.

=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd&quotes=gbp&providers=bbk&group=month")

Pobiera to kurs dolara amerykańskiego do funta brytyjskiego aż do 1949 roku z archiwum Deutsche Bundesbank. Historyczne fixingi Bundesbanku obejmują dolara wobec marki niemieckiej od 1948 roku oraz większość innych kursów dolara od 1949 do 1970 roku. Od 1999 roku kontrolę przejmuje Europejski Bank Centralny; nowoczesne szeregi czasowe korzystają ze standardowego kursu uśrednionego lub providers=ecb.