ご質問や問題がありますか?GitHub Discussionsでお気軽にご相談ください。

Google Sheetsには為替レート用のGOOGLEFINANCEが用意されており、簡単な換算にはこれで十分です。問題は情報源です。GOOGLEFINANCEが返すのは、内訳を確認することも選ぶこともできない出所不明の合成市場レートです。Frankfurterは、内訳を確認できる中央銀行のレートを合成しています。公的機関のレートが必要な場合は、EU付加価値税用のECB基準レート、ポーランドのNBP、ブラジルのPTAXなど固定の機関を選択できます。固定した提供元の過去データは、公表時のまま変わりません。以下の数式はGOOGLEFINANCEを使う場面全般で利用できます。

クイックスタート

設定やAPIキーは不要です。IMPORTDATA関数とCSVエンドポイントをセルに入力するだけで最新レートを取得できます:

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

Google Sheetsにdate,base,quote,rateのテーブルが展開されます。date列は初期状態でシリアル値として表示される場合があります。列を選択して表示形式 > 数字 > 日付を選択すると日付形式で表示されます。複数の対象通貨を一度に取得するにはカンマで区切ります:

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

金額の換算

IMPORTDATAは為替レートを返します。読み込んだレートのセルに換算前の金額を掛け合わせるか、以下のカスタム関数を利用してください。

カスタム関数

再利用可能な=FRANKFURTER()関数を作成するには、短いApps Scriptを追加します。スプレッドシートの拡張機能 > Apps Scriptを開き、次のコードを貼り付けて保存します:

/**
 * 金額を、本日のレートまたは指定した日付のレートで別の通貨に換算します。
 * @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;
}

任意のセルから呼び出します:

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

日付を指定して過去のレートを取得:

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

特定の公的機関を指定

デフォルトでは全提供元を組み合わせた合成レートが返されます。クエリにprovidersを追加して特定の機関を指定できます。税務や会計では自国の中央銀行レートが義務付けられることが多いため不可欠です:

=IMPORTDATA("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur&providers=ecb")
ECB
欧州中央銀行の基準レート。EUのVATおよび関税の公式基準。
NBP
ポーランド国立銀行。ポーランドの税務申告で使用。
CNB
チェコ国立銀行。チェコの会計および税務の公式基準。
BCB
ブラジル中央銀行PTAX。ブラジルの契約および税務の公式基準。
BANXICO
メキシコ銀行の米ドル債務決済用FIXレート。

すべての提供元を確認できます。特定の提供元を指定した場合、その機関の公表スケジュールに従うため、合成市場レートより最新レートが1日遅れる場合があります。

過去の推移データ

期間指定にはfromを使用し、group=monthで月ごとに集約してグラフ作成に適した形式にします。合成レートの過去データは、新しいデータの到着によって若干変わることがあります。数値を固定したい場合は提供元を指定してください。

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

これはドイツ連邦銀行(ブンデスバンク)のアーカイブから1949年以降の米ドル対英ポンドのレートを取得します。連邦銀行のFixingデータは、1948年からの米ドル対ドイツマルク、および1949年から1970年までの主要通貨レートを網羅しています。1999年以降は欧州中央銀行が引き継いでおり、現代の連続した時系列には標準の合成レートまたはproviders=ecbを使用します。