ExcelのPRICE関数の使い方|国債・社債の理論価格を1関数で算出

スポンサーリンク

債券投資や資産運用の現場で「この利回りなら今いくらで買うのが妥当か」を即座に出したい場面はよくありますよね。手計算で各キャッシュフローを現在価値に割り引いて足し合わせるのは時間がかかりますし、入力ミスのリスクもあります。

ExcelのPRICE関数(プライス関数)を使えば、定期的に利息(クーポン)を支払う債券の理論価格を1つの数式で算出できます。引数は7つですが、設定を覚えてしまえば国債・社債の評価まで幅広く対応できますよ。

この記事では、PRICE関数の構文と引数の意味、半年利払い社債の実例、クリーン価格とダーティ価格の違いを解説します。あわせてYIELD・DURATION・MDURATION関数との関係も実務目線で整理しますね。

ExcelのPRICE関数とは?

ExcelのPRICE関数は、定期的に利息を支払う証券(債券)の額面100あたりの価格を計算する財務関数です。読み方は「プライス」で、日本語では「定期利付債券の現在価格」を返す関数と言えます。

利回り(YTM、年利回り)を入力すると、その利回りに見合った理論価格が返ってきます。たとえば「残存5年・年クーポン4%・利回り3.5%・半年利払い」の社債なら、額面100あたり102.275が即座に得られますよ。

PRICE関数の特徴は次の3つです。

  • 利回り(yld)から価格を逆算するため、入札・売買の意思決定で使いやすい
  • 戻り値は額面100あたりの価格(クリーン価格)で、経過利子は含まない
  • 半年利払い・年1利払い・四半期利払いに対応(frequency引数で指定)

財務分野でPRICE関数を使えるようになると、DURATION関数(マコーレー・デュレーション)やMDURATION関数(修正デュレーション)と組み合わせて、価格と利回りの感応度分析も自然に進められるようになりますよ。

PRICE関数の構文と引数

PRICE関数の構文は次の通りです。引数は7つで、最後のbasisだけ省略可能です。

=PRICE(settlement, maturity, rate, yld, redemption, frequency, [basis])

各引数の意味と入れ方を表で整理しました。

引数必須内容入れ方の例
settlement必須受渡日(決済日)DATE(2026,5,6)
maturity必須満期日(償還日)DATE(2031,5,6)
rate必須年クーポン率4% または 0.04
yld必須年利回り(YTM)3.5% または 0.035
redemption必須額面100あたりの償還価額通常は 100
frequency必須年間利払い回数1/2/4 のみ
basis任意日数計算基準04(既定は0)

各引数の詳細

settlement(決済日)とmaturity(満期日)

settlementは「実際に代金を払って受渡しをする日」です。約定日と混同しがちですが、約定日ではなく決済日を入れます。maturityは「元本が償還される最終日」で、settlementより後ろの日付でなければエラーになります。

日付は必ずDATE関数で生成するのが安全です。文字列で "2031/5/6" と直接渡してもふつうは動きます。ただしロケール(地域設定)依存で危険なので避けましょう。

rate(クーポン率)とyld(利回り)

rateは年利クーポン率、yldは年利回り(YTM、最終利回り)です。どちらも年率で入力します。半年利払いだからといって半分にする必要はありませんよ。

rateとyldは%表記でも小数表記でも構いません。マイナス値を入れると#NUM!エラーになります。

redemption(償還価額)

額面100あたりの償還価額です。通常はパー償還で 100 を入れます。額面割れで償還されるケース(コーラブル債等)は別の関数を使うことが多いので、PRICEでは100を基本にしてください。

frequency(利払頻度)

年間の利払い回数で、1(年1回)/2(半年に1回)/4(四半期に1回)の3択のみです。月次(12)や日次を入れると#NUM!エラーになりますので注意してください。

basis(日数計算基準)

クーポン期間の日数の数え方を指定します。省略すると0(30/360方式)が使われます。詳しくは次の表で整理します。

basis計算方式主な用途
0(既定)30/360(米国NASD方式)米国社債、簡易計算
1実日数/実日数(Actual/Actual)米国財務省証券(米国債)
2実日数/360一部マネー市場
3実日数/365一部円建て商品
430/360(欧州方式)ユーロ債

実務では「米国債=1、米国社債=0、ユーロ債=4」を覚えておくと迷いません。日本国債は実日数ベースの慣行ですが、Excel上の簡易計算では03を使うケースが多いですよ。

基本的な使い方|半年利払い社債の価格を計算する

実際にPRICE関数を使ってみましょう。次のような米国社債タイプの債券を想定します。

  • 決済日: 2026年5月6日
  • 満期日: 2031年5月6日(残存5年)
  • クーポン率: 4%(年率)
  • 利回り(YTM): 3.5%(年率)
  • 償還価額: 100(パー償還)
  • 利払頻度: 半年に1回(frequency=2)
  • 日数計算基準: 30/360(basis=0)

セルへの入力例は次のようになります。

=PRICE(DATE(2026,5,6), DATE(2031,5,6), 4%, 3.5%, 100, 2, 0)

結果は 102.275(額面100あたり)が返ります。クーポン4%が利回り3.5%を上回っているため、額面より高いプレミアム価格になっていますね。

額面換算の仕方

PRICEの戻り値は「100あたり」の数値です。実際の取引額面が違う場合は、額面金額を100で割って掛け算します。

たとえば額面1,000,000円の社債であれば、クリーン価格は次のように計算します。

取引価格 = PRICE結果 × 額面 / 100
        = 102.275 × 1,000,000 / 100
        = 1,022,750円

パー価格の確認

「クーポン率=利回り」のときはパー価格(100ぴったり)になります。同じ5年社債で利回りも4%にして検算してみましょう。

=PRICE(DATE(2026,5,6), DATE(2031,5,6), 4%, 4%, 100, 2, 0)
→ 100.000

きれいに100が返ってきますね。これは「投資家が要求する利回り=発行体が支払うクーポン率」のときに価格は額面と一致するという債券の基本原則を表しています。PRICE関数がこの原則を忠実に再現していることが確認できますよ。

内部計算式(理解を深めたい人向け)

クーポン期日に一致する受渡日(端数日数なし)の場合、PRICEの計算は次の式と一致します。

PRICE = Σ(k=1→n) [(rate × 100 / freq) / (1 + yld/freq)^k]
      + redemption / (1 + yld/freq)^n

ケース1の数値で確認すると、半年クーポン2.0が10回(5年×2)と償還100の現在価値合計が102.275となり、PRICE関数の戻り値と一致します。手計算と関数の整合が取れていれば、安心して実務で使えますよ。

クリーン価格とダーティ価格の違い|経過利子の扱い

PRICE関数を使う上で必ず押さえたいのが「クリーン価格」と「ダーティ価格」の違いです。

クリーン価格 vs ダーティ価格

  • クリーン価格: 経過利子(Accrued Interest、前回利払日から受渡日までに発生した利息)を含まない価格
  • ダーティ価格: クリーン価格 + 経過利子(実際の取引で支払う総額)

PRICE関数が返すのはクリーン価格です。市場での実際の取引代金は「ダーティ価格」になるため、両者の違いを理解していないと実務で必ず混乱します。

経過利子の計算

経過利子は次の式で計算できます。

経過利子(額面100ベース) = 100 × rate × (経過日数 / 年日数)

たとえば、額面100・クーポン4%・前回利払日から3ヶ月経過したケースでは次のとおりです。

経過利子 = 100 × 4% × (3 / 12) = 1.0

ACCRINT関数で自動計算する

経過利子は手計算でも出せますが、ExcelのACCRINT関数を使えば自動で算出できます。構文は次の通りです。

=ACCRINT(発行日, 直前利払日, 受渡日, rate, par, frequency, [basis])

クリーン価格と経過利子をそれぞれ別セルで計算し、合算してダーティ価格を出すのが実務での標準的な流れです。

項目セル例数式結果
クリーン価格(100あたり)C2=PRICE(...)102.275
経過利子(100あたり)C3=ACCRINT(...)1.000
ダーティ価格(100あたり)C4=C2+C3103.275
取引価格(額面1,000,000)C5=C4*1000000/1001,032,750

PRICE単体では実取引価格になりません。ここを誤解すると、社内説明や決済額の計算でズレが出るので注意しましょう。

実務での活用例3パターン|国債・社債・既発債の中途売買

PRICE関数の活用シーンを3つ紹介します。どれも筆者が実務で見かける典型例です。

パターン1: 日本国債の落札利回りから参考価格を計算

入札で5年国債(クーポン1.5%)を落札利回り1.0%で取得した場合、参考価格をPRICEで試算します。

=PRICE(DATE(2026,5,6), DATE(2031,5,6), 1.5%, 1.0%, 100, 2, 0)
→ 102.433

クーポン1.5%が利回り1.0%を上回っているため、額面100あたり102.43のプレミアム価格になります。額面1億円なら取得参考価格は約1億243万円です。

パターン2: 米国社債の購入判断

10年米国社債(クーポン5%)を市場利回り6%で買付するケースです。

=PRICE(DATE(2026,5,6), DATE(2036,5,6), 5%, 6%, 100, 2, 0)
→ 92.561

利回りがクーポンを上回っているため、価格は92.56のディスカウント水準になります。「金利が上がると価格が下がる」という債券の基本原則がPRICEの数値で確認できますね。

パターン3: 利回り感応度シミュレーション(投資判断)

同じ債券でYTMを変化させ、価格がどう動くかを表化すると投資判断に役立ちます。5年・4%クーポン・半年利払いのケースで作成すると次のようになります。

利回り(YTM)PRICE関数結果パー(100)からの乖離
3.0%104.611+4.61%
3.5%102.275+2.28%
4.0%100.0000.00%
4.5%97.783-2.22%
5.0%95.624-4.38%

利回り0.5%の上昇で価格は約-2.22%動きます。この「利回り変化に対する価格変化」がまさに修正デュレーション(MDuration)が示す感応度です。詳しい解説はシリーズ記事のExcelのMDURATION関数の使い方を参照してくださいね。

PRICE × YIELD × DURATION × MDURATIONの関係

債券評価の財務関数は単独で使うより、組み合わせると威力を発揮します。4つの関数の関係を整理しましょう。

4関数の役割マップ

関数入力出力使う場面
PRICE利回り価格利回りから理論価格を出す
YIELD価格利回り取引価格から利回りを逆算
DURATION利回りマコーレー年限キャッシュフローの加重平均年限
MDURATION利回り修正デュレーション利回り変化に対する価格感応度

PRICE↔YIELDの双方向検算

PRICE と YIELD は互いに逆関数の関係にあります。検算してみましょう。

ケース1の債券(5年・4%・半年・パー償還)で利回り3.5%を入れたPRICE結果は102.275でした。今度は逆に、価格102.275から利回りを逆算します。

=YIELD(DATE(2026,5,6), DATE(2031,5,6), 4%, 102.275, 100, 2, 0)
→ 0.035(=3.5%)

入力した利回りと一致しますね。これでPRICEとYIELDの計算ロジックが整合していることを自分の手で確認できます。

DURATION/MDURATIONによる価格感応度の確認

5年・4%・パー価格(YTM=4%)の債券で、利回りを0.5%上昇させたときの価格変化を見ます。

  • PRICE関数: 100.000 → 97.783(変化率 -2.22%
  • MDURATIONによる一次近似: -MDuration × Δy = -4.411 × 0.5% = -2.21%

ほぼ一致しますね。差の0.01%は二次以降の項(コンベクシティ)によるものです。詳しい話はExcelのMDURATION関数の使い方の記事を参照してくださいね。

シリーズで使う流れ

  1. DURATIONで加重平均年限を確認 → 投資の長さの感覚をつかむ
  2. MDURATIONで価格感応度を確認 → リスク量を把握する
  3. PRICEで具体的な理論価格を算出 → 取引判断に使う
  4. YIELDで逆算検算 → 整合性チェック

このフローで4関数を組み合わせると、債券評価の自己整合性が確保されますよ。

よくあるエラーと対処法

PRICE関数で発生しやすいエラーと対処法を整理します。

#NUM! エラー

最も多いエラーです。次のいずれかが原因です。

原因対処法
settlement ≧ maturitymaturityを後ろの日付に修正
rate < 0 または yld < 0負の値は不可。クーポン・利回りを正の値に
redemption ≦ 0通常は100を入れる
frequency が 1, 2, 4 以外月次(12)等は不可。1/2/4のいずれかに
basis が 0〜4 以外0〜4の整数を指定

#VALUE! エラー

settlementやmaturityが日付として認識されていないことが原因です。文字列ではなくDATE関数で生成しましょう。

誤: =PRICE("2026-05-06", "2031-05-06", 4%, 3.5%, 100, 2, 0)
正: =PRICE(DATE(2026,5,6), DATE(2031,5,6), 4%, 3.5%, 100, 2, 0)

#NAME? エラー

Excel 2003以前で「分析ツール」アドインが読み込まれていない場合に発生します。Excel 2007以降は標準搭載なので、ほぼ気にしなくて大丈夫ですよ。

結果がおかしい(理論価格と乖離する)

エラーは出ないが値が想定と違う場合は、次を確認してください。

  • frequencyの取り違え(半年なのに1を入れている等)
  • basisの選択が用途と違う(米国債なのにbasis=0を使う等)
  • 利回りのスケール(%入力か小数入力か)

特にbasisは結果を細かく動かすため、米国社債/米国債/ユーロ債の使い分けに注意しましょう。

まとめ|PRICE関数で債券評価の入り口を押さえる

ExcelのPRICE関数は、定期的に利息を支払う債券の理論価格を1関数で算出できる便利な財務関数です。本記事のポイントを整理します。

  • PRICE関数は利回りから価格を返す関数で、戻り値は額面100あたりのクリーン価格
  • 7つの引数のうち重要なのはsettlement / maturity / rate / yld / frequencyの5つ
  • frequencyは1/2/4のみ、basisは0〜4で米国/欧州/日本債の慣行に合わせる
  • 実取引ではダーティ価格=クリーン価格+経過利子になる点に注意
  • YIELD・DURATION・MDURATION と組み合わせて使うと、債券評価の自己整合性が確認できる

債券は「価格と利回りの逆方向の関係」を理解した上で、関数で素早く検算する習慣をつけると実務がぐっと楽になります。同シリーズのExcelのDURATION関数の使い方ExcelのMDURATION関数の使い方ExcelのFVSCHEDULE関数の使い方もあわせて読んで、財務関数を体系的に身につけてくださいね。

タイトルとURLをコピーしました