Excel の Power Query と Narwhal を使うと、祝日、発表日、経済データ、コモディティのスポット価格、為替レート、予測市場の確率をブックに取り込めます。Narwhal のアカウントとAPIキーはこれらのデータ API 全体で使え、Excel はブックを開いている間、クエリを更新できます。
セットアップする内容
Power Query は、Excel から API にリクエストを送り、JSON レスポンスを読み取るための仕組みです。ブックに、祝日の表や Brent のスポット価格など、必要なデータのクエリができあがります。実際には、領域ごとに 1 つのクエリを作ります。例ではどれも同じベース URL と Authorization ヘッダーを使い、パスとレスポンスのフィールドだけが領域ごとに違います。Narwhal は、CPI、インフレ、GDP、利回りといった経済データにも同じアカウントを使います。
APIキーを設定
- 無料キーを作成する Narwhal のサインアップ で無料のキーを作成します。ここで使うデータ API は、1 つのアカウントと 1 つのAPIキーでまとめて利用できます。REST と MCP は同じキーを共有しており、Excel の例ではそれを REST リクエストに付けて送ります。
- キーを環境変数に保管する キーを
NARWHAL_API_KEYという環境変数に保存します。Power Query の M コードの例では、AuthorizationヘッダーのYOUR_KEYを自分のキーに置き換えてください。ヘッダーの値はBearerで始まり、そのあとにキーが続きます。 - ブックを非公開に保つ Authorization ヘッダーは M コードの中にあるため、Power Query はキーをブックの中に保存します。ブック用には無料のキーを使い、ファイルは共有しないでください。これらの例では、環境変数がキーの値の代わりになることはありません。
空のクエリを開く
- [データの取得] を開く [データ] タブから [データの取得] を開きます。[その他のデータ ソースから]、[空のクエリ] の順に選びます。これらが、リクエストを始めるための Power Query のコントロールです。
- 詳細エディターを開く 空のクエリを詳細エディターで開き、次のセクションの M コードを貼り付けます。クエリを更新する前に、ヘッダーに自分のキーを入れてください。
- 返す結果を選ぶ
inの後ろの式が、そのクエリの結果を決めます。完全版の例ではHolidaysを返します。表ならReleases、Cpi、Fx、Fed、スポット価格ならBrentを返すようにします。取得したい領域ごとに、別々のクエリを使ってください。
Power Query M でデータを取得する
Web.Contents では https://api.narwhalapi.com を固定したままにします。エンドポイントのパスは RelativePath、パラメーターは Query に入れてください。そうすると更新が正しく動きます。Narwhal ヘルパーが JSON レスポンスを読み取り、各式が領域ごとのフィールドを選びます。発表日の式は出力する列の名前を指定し、MissingField.UseNull を使います。
ヘルパーは、パスと、省略可能なクエリパラメーターのレコードを受け取ります。クエリのレコードを渡さないときは、空のレコードを使います。Table.FromRecords はレコードの集まりをテーブルにして返し、Number.FromText は Brent の価格を数値にします。取得したい領域のレスポンスフィールドの選択は、呼び出しにつなげたままにしてください。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
])),
Holidays = Table.FromRecords(Narwhal("v1/calendars/holidays/USA/2026")[holidays]),
Releases = Table.FromRecords(
Narwhal(
"v1/economics/calendar",
[countries = "USA", start_date = "2026-11-01",
end_date = "2026-11-30", limit = "100"]
)[releases],
{"at", "period", "topic", "status"}, MissingField.UseNull),
Cpi = Table.FromRecords(
Narwhal("v1/economics/USA/cpi/observations", [start = "2025-09"])[observations]
),
Brent = Number.FromText(Narwhal("v1/commodities/spot/BRENT/USD")[price]),
Fx = Table.FromRecords(Narwhal("v1/fx/rates/USD", [currencies = "EUR,IDR"])[rates]),
Fed = Table.FromRecords(
Narwhal("v1/predictions/policy-paths/federal-reserve")[meetings]
)
in
// return Releases, Cpi, Fx or Fed the same way;
// each area is its own query in practice
Holidaysブックをスケジュールで更新する
クエリを更新するには、[データ] タブの [すべて更新] を使います。クエリのプロパティで、ファイルを開くときに更新する設定と、開いている間は N 分ごとに更新する設定ができます。これらの設定は開いているブックにだけ適用されるため、間隔ごとの更新を使うならブックを開いたままにしてください。
Excel にはバックグラウンドのスケジューラーがありません。無人で実行するには、Power Automate か Excel 外のスクリプトを使います。ファイルを開いたときに更新する設定のクエリは、ファイルを再び開いたときにデータを取得できます。一定間隔の更新は、ブックが開いたままであることが前提です。データを更新したいクエリには、それぞれ更新のプロパティを設定してください。
Excel で祝日を調べる
holidays フィールドから、2026年のアメリカの祝日を読み取ります。各祝日には date と name があり、Table.FromRecords がレコードをテーブルにします。このサンプルは、完全版の例と同じヘルパーとヘッダーを使って、祝日のテーブルをそのまま返します。独立したクエリとして使う前に、キーを置き換えてください。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
]))
in Table.FromRecords(Narwhal("v1/calendars/holidays/USA/2026")[holidays])Excel で発表日を調べる
releases から、2026年11月のアメリカの経済指標の発表日を取得します。返るフィールドは at、period、topic、status です。国と日付のパラメーターは Query レコードに入れたままにします。このリクエストは発表カレンダー用です。CPI の観測期間と値が必要なときは、経済データのクエリを使ってください。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
]))
in Table.FromRecords(
Narwhal(
"v1/economics/calendar",
[countries = "USA", start_date = "2026-11-01",
end_date = "2026-11-30", limit = "100"]
)[releases],
{"at", "period", "topic", "status"},
MissingField.UseNull
)Excel で経済データを調べる
開始パラメーターを 2025年9月にして、アメリカの CPI 観測値をリクエストします。observations を読み取ると、period と value のフィールドがテーブルになります。結果をブックで使うときは、期間を観測値と組にしておいてください。開始パラメーターは、完全版の例と同じく Query に入れておきます。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
]))
in Table.FromRecords(
Narwhal("v1/economics/USA/cpi/observations", [start = "2025-09"])[observations]
)Excel でコモディティのスポット価格を調べる
Brent の USD 建てスポット価格を price から読み取ります。このレスポンスフィールドは価格で、M の式は Number.FromText を使って数値として返します。コモディティのスポットコードには、たとえば XAU、XAG、XPT、XPD、XCU、BRENT、WTI があります。このサンプルでは BRENT を使います。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
]))
in Number.FromText(Narwhal("v1/commodities/spot/BRENT/USD")[price])Excel で為替レートを調べる
基準通貨に USD を使い、currencies パラメーターに EUR と IDR を指定します。レスポンスから rates を選び、レコードをテーブルにします。各レコードには currency と rate があるため、クエリ結果でも通貨がレートの隣に残ります。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
]))
in Table.FromRecords(Narwhal("v1/fx/rates/USD", [currencies = "EUR,IDR"])[rates])Excel で予測市場の確率を調べる
連邦準備制度の政策パスを取得し、レスポンスから meetings を読み取ります。各会合には resolves_at、p_cut、p_hold、p_hike があります。このサンプルは会合をテーブルとして返し、確定時刻と政策確率がフィールドとして使えます。これらの確率をブックで使いたいときは、独立したクエリとして使ってください。
let
Narwhal = (path as text, optional query as record) =>
Json.Document(Web.Contents("https://api.narwhalapi.com", [
RelativePath = path,
Query = if query = null then [] else query,
Headers = [Authorization = "Bearer YOUR_KEY"]
]))
in Table.FromRecords(Narwhal("v1/predictions/policy-paths/federal-reserve")[meetings])Power Query が認証情報を求めるのはなぜですか?
Web ソースの認証には [匿名] を選びます。Power Query は、Authorization ヘッダーを匿名認証でのみ許可します。それでもリクエストは、M コードに書いたヘッダーで Narwhal のキーを送ります。Web ソースの資格情報として選ぶのは匿名です。
結果を NETWORKDAYS で使えますか?
はい。NETWORKDAYS の祝日の引数に、Holidays テーブルの date 列を指定します。この引数には、クエリが返した祝日の日付を使い、name 列には祝日の名前が入っています。アメリカの祝日の例は 2026年をリクエストしているため、その日付は 2026年の祝日です。その日付が必要な計算に、この結果を使ってください。
公開。