2026年9月のUSD/IDRの平均レートは17,742.56でした。9月1日の17,744.7から9月30日の17,891.1までの22件の日次観測値の平均です。月の日次レートを1回リクエストして平均します。
APIで平均を計算する
平均したい月の日次観測値を使います。返されたレートを足し合わせ、観測値の件数で割ります。各観測値の重みは同じです。リクエストはUSDを基準通貨、IDRを対象通貨としています。平均をシートや請求書の計算で使うときは、この通貨ペアを結果に添えておきましょう。
- キーを取得して環境変数を設定 narwhalapi.com/signup で無料のキーを取得し、環境変数
NARWHAL_API_KEYに設定してください。スクリプトはこの変数を読み、AuthorizationヘッダーにBearerトークンとしてキーを付けて送信します。 - 月と通貨を指定する 日次観測値のエンドポイントに、月の開始日と終了日を指定します。スクリプトのリクエストは、USDを基準にした2026年9月のIDRを選びます。
limitは、その月の観測値の行数を十分に含められる大きさです。 - レートを取得して平均を計算する このスクリプトは観測値をリクエストし、各日付をレートの隣に保持して算術平均を計算します。観測件数と平均を表示し、続けて最初と最後の日付付き観測値を表示します。計算では、各観測値の中の
ratesからレートを読み取り、数値に変換してから足し合わせます。日付はその数値と一緒に保持するので、表示される最初と最後の行にも日付が残ります。import os import requests r = requests.get( "https://api.narwhalapi.com/v1/fx/rates/USD/observations", params={ "currencies": "IDR", "start_date": "2026-09-01", "end_date": "2026-09-30", "limit": 100, }, headers={"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}, timeout=10, ) r.raise_for_status() days = [(d["date"], float(d["rates"][0]["rate"])) for d in r.json()["observations"]] print(len(days), "days, average", round(sum(v for _, v in days) / len(days), 2)) print("first", days[0], "last", days[-1]) - 結果とあわせて日付を確認する 返された最初と最後の日付を、リクエストした月とあわせて確認します。その日付と観測件数を平均と一緒に保管すれば、結果の対象期間が明確になり、その元になった日次の行も特定できます。
1か月の日次観測値の行は100件を超えないため、リクエストの上限でこの計算は足ります。より長い期間では、next_cursor をたどって残りの観測値を取得してください。長い期間の平均には、その期間全体の観測値が必要です。最初のレスポンスだけでは一部しか含まれていないことがあります。
シートで平均を計算する
1か月分を手作業で行うには、日次レートをB列に貼り付け、観測日を隣に残します。平均したい月の行を使ってください。2026年9月のUSD/IDRの例は22件の観測値なので、レートはこの数式で使う範囲に収まります。
=AVERAGE(B2:B23)この数式は、その範囲にあるレートの単純平均を求めます。Pythonの計算と同じく、日次の観測値はそれぞれ同じ重みで寄与します。レートを貼り付けるときは日付の列も残して、セルが表す月と、含まれる最初と最後の観測値を確認できるようにしてください。
長いリストで月ごとの平均を出すには AVERAGEIFS を使います。観測日で、各平均に含めるレートの月を選びます。日付付きの観測値の長いリストをまとめたまま、それぞれの月の行から月別の平均を計算できます。
状況に応じた方法の選び方
| 状況 | 適した方法 | 理由 |
|---|---|---|
| 1か月を手作業で | シート | AVERAGEで月の日次レートの平均を求めます |
| 複数の月や通貨 | 開始日と終了日をループするスクリプト | リクエストした月や通貨ごとに、日次観測値の計算を繰り返します |
| 監査に耐える会計方針上のレート | 会計方針が指定するレート | 必要な方法はその方針によって決まります |
シートとスクリプトは、日次観測値の平均を計算します。方針上のレートには、月末レートの平均や加重平均など、別の方法が求められることがあります。請求書のレートとして結果を使う前に、会計上どの方法が必要かを決めてください。
月平均に週末を含めますか?
いいえ。データには観測日しか含まれず、週末の行はありません。通常はこの観測日を平均します。この算術平均の除数には、返された行数を使います。カレンダー上の日数で割ると、合計に含まれるのは返された日次観測値だけなので、計算が変わってしまいます。平均は、実際にレートがある日付に結びつけておきましょう。
会計にはどの平均が必要ですか?
それは会計方針によります。どのレートと方法が指定されているか、会計担当者に確認してください。日次観測値の算術平均は一般的な選択肢の一つです。会計ルールによっては、月末レートの平均や加重平均が求められることもあります。それらはレートの選び方や重みが異なるため、日次の平均だけでは会計にどのレートが適切かは決まりません。
レスポンスがリクエストした月より遅く始まっている場合は?
すべてのアカウントで全履歴を取得できます。結果を月全体の平均として扱う前に、最初に返された日付を確認してください。レスポンスが月の途中から始まる場合、返された観測値はその期間だけをカバーします。
計算例:2026年9月のUSD/IDR
2026年9月について、その月の22件の日次USD/IDR観測値の平均を取ります。最初の観測値は2026年9月1日、最後は2026年9月30日です。日次レートを足し、観測件数で割り、その平均を請求書の計算に使います。
| 2026年9月の計算 | 値 |
|---|---|
| 日次観測値 | 22 |
| 2026年9月1日のレート | 17,744.7 |
| 2026年9月30日のレート | 17,891.1 |
| 日次観測値の算術平均 | 17,742.56 |
| 請求金額 | USD 8,000 |
| 月平均レートでの請求 | 計算:8,000 × 17,742.56 = 141,940,480 IDR |
公開。