Tutorial/Google Sheetsクイックスタート

Google Sheetsでライブ為替レートを取得する

Apps Scriptのカスタム関数=FXRATE()でexchangerate.devを呼び出す。キャッシュとエラー処理つき。無料枠は月10,000コール、カード登録なし。

ERexchangerate.dev·Jun 29, 2026·5分で読了

Google Sheetsでライブ為替レートを使うには、/v1/latest/{base}をキー付きAuthorizationヘッダーで呼び出す小さなApps Scriptのカスタム関数を貼り付け、任意のセルに=FXRATE("USD","EUR")と書く。無料キーで月10,000コールまでカバーされ、カード登録は不要。下の関数は10分間キャッシュし、実際に遭遇する2つのエラーを処理する。Sheetsで運用しているモデルやダッシュボードに、そのままライブFX入力を与えられる。

Key points
カスタム関数なら任意のセルで=FXRATE("USD","JPY")が使える — アドオンのインストールは不要。
/v1/latest/{base}?symbols={quote}への1コールで、指定した通貨ペアが返る。
キーはAuthorization: Bearer exr_live_...で渡す。CacheServiceが無料枠の内側に収めてくれる。
無料枠は月10,000コール・毎分12リクエストで、カード登録は不要。
レートはインディケーティブ値 — モデル、分析、表示向けであり、取引の決済には使えない。

無料APIキーを取得する

exchangerate.dev/signupで登録する。メール確認後、ダッシュボードにexr_live_で始まるキーが表示される。これをコピーして次にApps Scriptへ貼り付ける。無料枠は月10,000コール、カード不要。

シートからApps Scriptを開く

任意のGoogleスプレッドシートを開き、メニューから拡張機能 → Apps Scriptをクリックする。新しいタブが開き、既定のfunction myFunction() {}が入っている。その中身は削除する — 次のステップで置き換える。

FXRATE関数を貼り付ける

エディターの内容をこの関数で置き換える。exchangerate.devを呼び出し、CacheServiceで各ペアを10分間キャッシュし、実際に起こりうる2つのエラー(401と429)には読めるマーカーを返す。

Code.gscopy
// google-sheets: Apps Script Code.gs
// Replace API_KEY with your exchangerate.dev key from /signup

const API_KEY = 'exr_live_replace_with_your_key_here';
const CACHE_TTL = 600; // seconds — FX moves slower than equities; 10 min is plenty

function FXRATE(from, to) {
  from = (from || 'USD').toString().toUpperCase();
  to = (to || 'EUR').toString().toUpperCase();

  const cacheKey = `fx_${from}_${to}`;
  const cache = CacheService.getScriptCache();
  const cached = cache.get(cacheKey);
  if (cached) return Number(cached);

  const url = `https://api.exchangerate.dev/v1/latest/${from}?symbols=${to}`;
  const resp = UrlFetchApp.fetch(url, {
    headers: { Authorization: `Bearer ${API_KEY}` },
    muteHttpExceptions: true,
  });

  const code = resp.getResponseCode();
  if (code === 401) return '#AUTH_ERROR';
  if (code === 429) return '#RATE_LIMIT';
  if (code !== 200) return '#ERROR';

  const data = JSON.parse(resp.getContentText());
  const rate = data.rates && data.rates[to];
  if (rate == null) return '#NO_PAIR'; // unknown currency code
  cache.put(cacheKey, String(rate), CACHE_TTL);
  return Number(rate); // coerce so cells sum and sort
}

任意のセルで=FXRATE()を使う

シートに戻り、空のセルに=FXRATE("USD","EUR")と入力する。1秒ほどで現在のレートが表示される。同じ関数はサポートされている任意のペアで動く — 2つの通貨コードを入れ替えるだけだ:

Sheets formula · pairscopy
// Euro per US dollar
=FXRATE("USD", "EUR")        // 0.9245

// Japanese yen per US dollar
=FXRATE("USD", "JPY")        // 157.32

// British pound per euro
=FXRATE("EUR", "GBP")        // 0.8531

// Indonesian rupiah per US dollar
=FXRATE("USD", "IDR")        // 16285.0

内部では、各コールがベース通貨、絞り込んだペア、そして2つの鮮度フィールド — sourcemarket_session — を返すため、その数値がどれくらい新しいかが常に分かる:

GET /v1/latest/USD?symbols=JPYcopy
{
  "result": "success",
  "base": "USD",
  "source": "live",
  "market_session": "open",
  "timestamp": "2026-06-29T09:14:02Z",
  "data_updated_at": "2026-06-29T09:14:00Z",
  "rates": { "JPY": 157.32 },
  "sources": { "JPY": "live" },
  "notice": "Indicative rates, not for settlement."
}
AIアシスタントと一緒に作るなら
exchangerate.devはMCPサーバーとllms.txtを公開しているので、ClaudeやCursor、ChatGPTがライブのスキーマを読んでこの関数を書いてくれる。「fromとtoの通貨を受け取ってexchangerate.devのライブレートを返す、10分キャッシュ付きのFXRATEというGoogle Sheetsカスタム関数を作って」と頼めばよい。詳しくはMCPガイドを参照。

更新頻度と無料枠の収まり

Apps Scriptはカスタム関数をタイマーで自動再実行しない。定期更新したい場合は時間主導型のトリガーを追加する:Apps Script左側のレールでトリガー → トリガーを追加をクリックし、FXRATEを選び、ソースは時間主導型分ベースのタイマーにする。10分キャッシュと十分な枠があるので、頻繁に触るブックでも安全に収まる:

  • 月10,000コール、毎分12リクエスト、カード不要
  • CacheServiceが10分間はキャッシュ済みのレートを返すため、編集を繰り返してもコールは増えない
  • ペアの多いシートが毎分の上限に触れそうならCACHE_TTLを上げる
  • /v1/latest/v1/convert/v1/range/v1/{date}/{base}をカバー
コード症状対処
401セルに#AUTH_ERRORが表示されるキーが未設定か無効。ダッシュボードからCode.gs冒頭のAPI_KEYにコピーし直す。
429セルに#RATE_LIMITが表示される毎分の上限を超えた。通常はキャッシュが防ぐ。CACHE_TTLを上げるか、/pricingで上位プランへ。
セルに#NO_PAIRが表示されるクォート通貨がレスポンスに含まれていない。コードがサポート対象のISO通貨か確認する(例:JYPではなくJPY)。
セルがLoading…のままApps Scriptに外部フェッチの承認が必要。エディターのツールバーから関数を一度実行して確認ダイアログを出し、承認する。
インディケーティブレート — 決済には使えない
これらのレートはモデル、分析、表示向けに公開されている。ディーリングクォートではなく、取引や送金の決済に使ってはならない。すべてのレスポンスのnoticeフィールドにその旨が記載されている。
ER
exchangerate.dev
FXデータを扱う開発者向けの統合ガイド。

Keep reading

TutorialExcelにPower Queryでライブ為替レートを取り込むRead TutorialJavaScriptとNode.jsによる通貨換算Read TutorialPythonで為替レートを取得する方法Read
他の比較Fixer vs exchangerate.devOpen Exchange Rates vs exchangerate.devCurrencylayer vs exchangerate.dev
学ぶReading source and market_session in your pipelineIndicative vs executable FX rates: what a rates API actually gives youECB reference rates, explained
ライブレートEUR/USDGBP/USDUSD/JPY