この記事で分かること
- PRICE・YIELD・DURATION・MDURATION関数の構文と、決済日・満期日・利率・利回り・償還・頻度・基準という共通引数の意味
- 設例の社債(額面100円・クーポン年率0.70%・半年払い・残存5年)で価格とデュレーションを実際に計算する手順
- 修正デュレーションを使って金利変化が価格に与える影響を近似する方法と、その近似が外れる場面
- 決済日・利払回数・基準の入力ミスで起きる典型的な事故と、その防ぎ方
結論:価格と利回りは表裏の関係、DURATIONは金利感応度を測る
債券の価格と利回りは、同じキャッシュフローを2つの角度から見ているだけの関係です。利回りが上がれば価格は下がり、利回りが下がれば価格は上がります。この関係自体は債券の基礎|クーポン・額面・アンダーパー/オーバーパーと価格・利回りの逆相関で説明した通りですが、実務でその価格や利回りを電卓で毎回計算する人はいません。Excelには、決済日・満期日・利率・利回りといった条件を渡すだけで価格や利回りを返す関数が用意されています。
ここではPRICE(利回りから価格を出す)・YIELD(価格から利回りを逆算する)・DURATION(マコーレー・デュレーションを出す)・MDURATION(修正デュレーションを出す)の4関数を、1つの社債の設例を通して一連の実務手順として扱います。用語としての「デュレーションとは何か」は用語集|デュレーションに譲り、ここでは「Excelでどう組むか」「どこで事故が起きるか」に絞ります。個別の利回り水準の評価や信用リスクの読み方は債券利回りの基礎とYTM|価格95円の債券の
4つの関数の全体像と共通引数
この4関数はいずれも「額面100円あたり」で価格や日数を扱う点で設計が揃っています。まず全体像を押さえておくと、個々の引数の意味を覚えやすくなります。各関数の一行定義は用語集|Excel債券関数群にまとめてありますので、ここでは実務で迷いやすい引数の対応関係を表で整理します。
| 引数 | 内容 | PRICE | YIELD | DURATION | MDURATION |
|---|---|---|---|---|---|
| settlement(決済日) | 受渡日。約定日ではなく資金・証券が実際に受け渡される日 | ○ | ○ | ○ | ○ |
| maturity(満期日) | 償還日 | ○ | ○ | ○ | ○ |
| rate/coupon(利率) | 年率のクーポン利率 | ○ | ○ | ○ | ○ |
| yld(利回り) | PRICE・DURATION・MDURATIONでは入力値、YIELDでは戻り値 | ○(入力) | ○(出力) | ○(入力) | ○(入力) |
| pr(価格) | YIELDのみで使う、額面100円あたりの現在価格 | — | ○(入力) | — | — |
| redemption(償還価額) | 額面100円あたりの償還価格。通常は100 | ○ | ○ | — | — |
| frequency(頻度) | 年間の利払回数。1=年1回、2=半年ごと、4=四半期ごと | ○ | ○ | ○ | ○ |
| basis(基準・省略可) | 日数計算方式。0〜4の整数(下記参照) | ○ | ○ | ○ | ○ |
4関数とも、決済日・満期日は日付そのものではなくDATE関数かシリアル値で渡す必要があります。文字列の「2026/9/10」をそのまま渡すとエラーになる環境があるため、日付はセル参照かDATE関数で統一するのが安全です。ほかの財務関数の基本(NPV・IRR・XIRR)はNPV・IRR・XIRR関数の実践|Excelでの正しい使い方と3つの罠で扱っているので、あわせて確認してください。
PRICE関数:クーポン・利回りから価格を出す
構文
PRICE(決済日, 満期日, 利率, 利回り, 償還価額, 頻度, [基準])
PRICE関数は、利回りが分かっているときに額面100円あたりの価格を返します。引数のredemption(償還価額)は満期時に戻ってくる金額を額面100円あたりで指定するもので、途中償還条項がない普通社債や国債であれば通常は100を入力します。ここを誤って「1」や実際の額面金額(10,000円など)を入れると、価格がまったく違う桁の数値になります(後述の事故事例を参照)。
basis(基準)は0〜4の整数で日数計算方式を切り替える引数です。0(省略時)は米国NASD方式の30/360、1は実際/実際、2は実際/360、3は実際/365、4はヨーロッパ方式の30/360です(出典:Microsoft サポート「PRICE 関数」)。決済日が利払日からずれている銘柄では、この基準の選び方が価格の小数点以下に影響します。実務では、対象銘柄の発行要項・目論見書に定められた日数計算方式に合わせるのが原則で、基準を「なんとなく省略」して既定値の30/360のまま使うと、実際/実際で計算する市場の銘柄と数銭単位でずれることがあります。
YIELD関数:価格から利回りを逆算する
構文
YIELD(決済日, 満期日, 利率, 価格, 償還価額, 頻度, [基準])
YIELD関数はPRICEの逆で、市場で観測された価格(pr)から利回りを逆算します。取引所や証券会社の気配値は「価格」で表示されることが多いため、その価格を投資家が比較しやすい利回りに変換する場面で使います。引数の並びはPRICEとほぼ同じですが、yld(利回り)の位置にpr(価格)が入る点だけが違います。この2関数は「同じ7つの条件のうち、どちらを既知としてどちらを未知にするか」が違うだけなので、セットで覚えると引数の取り違えが減ります。
YIELD関数が返す利回りは、頻度で指定した複利周期に基づく最終利回り(YTM)の年率表示です。YTMという概念そのものの意味や、それが「保有し続けた場合の内部収益率」であることの説明は債券利回りの基礎とYTMに委ねます。
DURATION・MDURATION:金利感応度を測る
構文
DURATION(決済日, 満期日, 利率, 利回り, 頻度, [基準])
MDURATION(決済日, 満期日, 利率, 利回り, 頻度, [基準])
DURATION関数はマコーレー・デュレーションを年単位で返します。マコーレー・デュレーションは、各キャッシュフロー(クーポンと償還額)の現在価値を重みにして、それぞれの受取時期(年数)を加重平均した値です。「平均して何年後にキャッシュフローを回収できるか」を表す時間の指標だと考えると理解しやすくなります。
MDURATION関数はマコーレー・デュレーションを1期あたりの利回り(yld÷frequency)で割り引いた修正デュレーションを返します。修正デュレーションは「利回りが1%動いたときに価格が何%動くか」を近似する感応度そのものであり、実務でリスク管理の指標として使うのはほぼ常にこちらです。DURATIONとMDURATIONの使い分けを一言でいえば、DURATIONは時間の単位、MDURATIONは感応度の単位という違いになります。両者の引数は同一で、償還価額(redemption)を取らない点がPRICE・YIELDとの違いです。これは、デュレーションが「価格そのもの」ではなく「価格の変化率」を測る指標であり、額面100円あたりで正規化した計算の中で償還価額を別出しする必要がないためです。
設例:社債の価格とデュレーションを計算する
以下は説明用の仮設例です。実在の銘柄ではありません。額面100円・クーポン年率0.70%(半年払い)・残存5年の社債を想定し、市場利回りが年率1.10%のときの価格とデュレーションを求めます。決済日はちょうど利払日に一致させているため、経過利子(端数期間の利息)を考えずに計算できる、もっとも基本的なケースです。
| 入力項目 | 値 |
|---|---|
| 決済日 | 2026年9月10日 |
| 満期日 | 2031年9月10日(残存5年、利払日と一致) |
| 利率(年率、半年払い) | 0.70% |
| 利回り(年率) | 1.10% |
| 償還価額(額面価額100円あたり) | 100 |
| 頻度 | 2(半年ごと) |
| 基準 | 1(実際/実際) |
この条件をPRICE関数に渡すと次の式になります。
数式
=PRICE(DATE(2026,9,10),DATE(2031,9,10),0.007,0.011,100,2,1)
結果:98.0592(額面100円あたり98円5銭9厘6毛)
この結果は、残存10半期分のクーポン(1期あたり0.35円)と満期時の償還100円を、半期あたり利回り0.55%で割り引いた現在価値の合計に一致します。クーポン利率0.70%より利回り1.10%の方が高いため、価格は額面100円を下回るアンダーパー(98.0592円)になります。同じ条件でDURATION・MDURATIONを計算すると次の通りです。
| 関数 | 数式 | 結果 |
|---|---|---|
| PRICE | =PRICE(DATE(2026,9,10),DATE(2031,9,10),0.007,0.011,100,2,1) | 98.0592円 |
| DURATION | =DURATION(DATE(2026,9,10),DATE(2031,9,10),0.007,0.011,2,1) | 4.9213年 |
| MDURATION | =MDURATION(DATE(2026,9,10),DATE(2031,9,10),0.007,0.011,2,1) | 4.8944年 |
マコーレー・デュレーション4.9213年を、半期あたり利回り0.55%で1.0055で割ると、修正デュレーション4.8944年になります(4.9213÷1.0055=4.8944)。この社債は残存5年ですが、クーポンを毎期受け取る分だけ、キャッシュフロー全体の平均回収期間は満期日そのものより短くなっています。逆にPRICE関数を使って価格98.0592円・利率0.70%・償還100・頻度2・基準1からYIELDを逆算すると1.10%に戻り、PRICEとYIELDが表裏一体であることを確認できます。
感応度分析:修正デュレーションで金利変化の影響を近似する
修正デュレーションの実務的な使い道は、利回りが動いたときの価格変化を、PRICE関数を組み直さずに素早く見積もることです。近似式は次の通りです。
式
価格変化率(%)≈ −修正デュレーション × 利回りの変化幅(%)
設例:利回りが1.10%から1.20%へ+10bp(+0.10%)動くと、価格変化率は−4.8944×0.10%=−0.4894%と近似できる
実際にPRICE関数で利回り1.20%の価格を計算すると97.5806円になり、実際の変化率は(97.5806−98.0592)÷98.0592=−0.4881%です。修正デュレーションによる近似(−0.4894%)と実際の変化率(−0.4881%)の差はわずか0.0013ポイントで、±10bp程度の小さな変化であれば近似はほぼそのまま使えることが分かります。
ただし修正デュレーションはあくまで接線による直線近似であり、価格と利回りの関係は実際には曲線(凸性)を持っています。下の表は、利回りの変化幅を±10bp・±25bp・±50bp・±100bpと広げたときに、PRICE関数で計算した実際の価格変化率と、修正デュレーションによる近似がどこまで一致するかを比較したものです。
| 利回りの変化幅 | PRICE関数の実際の価格 | 実際の変化率 | 修正デュレーションによる近似 |
|---|---|---|---|
| −100bp(0.10%) | 102.9918円 | +5.0302% | +4.8944% |
| −50bp(0.60%) | 100.4918円 | +2.4808% | +2.4472% |
| −25bp(0.85%) | 99.2672円 | +1.2320% | +1.2236% |
| −10bp(1.00%) | 98.5404円 | +0.4908% | +0.4894% |
| +10bp(1.20%) | 97.5806円 | −0.4881% | −0.4894% |
| +25bp(1.35%) | 96.8675円 | −1.2153% | −1.2236% |
| +50bp(1.60%) | 95.6918円 | −2.4142% | −2.4472% |
| +100bp(2.10%) | 93.3878円 | −4.7638% | −4.8944% |
±10bp・±25bpまではほぼ一致しますが、±50bpを超えたあたりから乖離が広がり始め、+100bpでは実際の下落率(−4.7638%)が近似(−4.8944%)より小さく、−100bpでは実際の上昇率(+5.0302%)が近似(+4.8944%)より大きくなっています。これは価格と利回りの関係が直線ではなく下に凸の曲線であるためで、この曲がり具合を表す指標が用語集|コンベクシティです。大きな金利変化を扱うポートフォリオでは、修正デュレーションだけでなくコンベクシティも合わせて見る必要があります。
決済日・利払回数・基準の指定ミスによる典型的な事故
PRICE・YIELD・DURATION・MDURATIONは引数の数が多く、しかも似た関数同士で引数の並びが微妙に違うため、入力ミスがそのまま桁違いの誤答につながりやすい関数群です。ここでは、実際にExcelで数式を組んで確認した代表的な事故を紹介します。
償還価額を「1 」で入力してしまう
redemption(償還価額)は額面100円あたりの金額で入力する引数です。ここに実際の投資金額や「1」(100%のつもりで小数を入れてしまう)を入れると、価格はまったく違う値になります。先の設例と同じ利率0.70%・利回り1.10%のまま、redemptionだけを100から1に変えて計算すると、価格は4.3430円になります。正しい98.0592円とは比較にならない値ですが、数式としてはエラーにならずに計算されてしまうため、見た目だけでは気づきにくい事故です。
利率をパーセント表記のまま入力してしまう
rate(利率)は0.007のような小数(=0.70%)で入力する引数です。セルの表示形式を%にしないまま「0.7」と入力し、それを70%(年率クーポン70%)として渡してしまうと、PRICE関数は434.30円という、額面100円の債券としてはあり得ない価格を返します。結果が明らかに異常な範囲に出た場合は、まずrateとyldの単位(小数かパーセントか)を疑うのが定石です。
決済日と満期日を取り違える
settlement(決済日)とmaturity(満期日)を逆に入力すると、償還までの残存期間がマイナスになり、PRICE関数は計算不能として#NUM!エラーを返します。エラー自体は分かりやすいものの、複数の銘柄を一括で計算する表で日付列の参照がずれていると、一部の行だけ#NUM!になり見落とされることがあります。日付を渡す列は、コピー時に参照がずれていないかを個別に確認してください。
利払回数(頻度)を1回に間違える
以下は頻度引数の誤りだけを確認するための別の設例です(額面100円・クーポン年率4.00%・利回り年率3.00%・残存5年・決済日は利払日に一致)。半年payの銘柄をfrequency=1(年1回)で計算すると、正しいfrequency=2の価格104.6111円に対して104.5797円となり、差は0.0314円です。1件あたりの差は小さく見えますが、これは額面100円あたりの差であり、額面10億円の取引であれば約31万円の誤差に相当します。約定金額の検算や決済照合で不一致が出た場合、まず疑うべき引数の一つです。
基準(basis)の選び違いと経過利子の失念
決済日が利払日からずれている(端数期間がある)銘柄では、basisの選択が価格に影響します。先の設例の決済日を利払日から3か月後(2026年12月10日)にずらして計算すると、基準0(米国式30/360)では価格98.1535円、基準1(実際/実際)では98.1540円となり、わずかですが値が変わります。さらに注意すべきは、PRICE関数が返すのは用語集|ダーティプライスとクリーンプライスでいうクリーンプライス(経過利子を含まない価格)だという点です。実際に買い手が支払う受渡代金は、このクリーンプライスに用語集|経過利子を加えたダーティプライスになります。日本の債券市場でも、受渡日が利払日と異なる場合には買い手が経過利子相当分を売り手に支払う実務があります(出典:日本証券業協会「(債券の)経過利子」)。この経過利子はACCRINT関数で別途計算するもので、PRICE関数の戻り値だけを「支払う金額」として扱うと、実際の受渡代金より経過利子の分だけ少ない金額しか用意しないことになります。日数計算の方式は、対象銘柄の発行要項に定められたものに合わせるのが原則で、basisの意味は用語集|デイカウント・コンベンションを参照してください。
感応度分析をデータテーブルで自動化する
図1・上の表のような「利回りを何段階か動かして価格を並べる」作業は、PRICE関数を1件ずつ手入力するのではなく、Excelのデータテーブル(What-If分析)で自動化できます。手順は、利回りをセル参照で持つ列を作り、その列を入力セルとするPRICE関数のセルを1つ用意し、範囲選択後に「データ」タブの「What-If分析」から「データテーブル」を選んで列入力セルに利回りのセルを指定するというものです。データテーブルの入力セルは、集計表と同じシート上のセルを指定する必要がある点に注意してください。データテーブル・ゴールシーク・シナリオの使い分けと具体的な操作手順はWhat-If分析の3兄弟|データテーブル・ゴールシーク・シナリオの使い分けで解説しています。数式や参照のコピーミスは、Excelのデータ検証(入力規則)でモデルの入力ミスを防ぐ実務で紹介している入力規則を決済日・頻度・基準のセルにかけておくと、前章のような事故を機械的に防げます。
よくある質問(FAQ)
PRICE関数とYIELD関数はどちらを覚えればよいですか。
両方セットで覚えるのが実務的です。市場から得られる情報が利回りなら価格を求めるためにPRICEを、価格(気配値)なら利回りを求めるためにYIELDを使います。引数の並びはほぼ同じで、yldとprの位置だけが入れ替わっています。
DURATIONとMDURATIONのどちらを金利リスク管理に使うべきですか。
価格の感応度
frequency(頻度)に3や6のような値を入れても計算できますか。
frequencyは1・2・4のいずれかである必要があります。日本の多くの社債・国債は半年payのため2を使う場面が最も多いですが、対象銘柄の利払条件を発行要項で確認してから入力してください。
redemption(償還価額)が100以外になるのはどんな場合ですか。
コーラブル債の期限前償還価格や、額面に対してプレミアム・ディスカウントで償還される条件が付いた銘柄では100以外の値になります。通常の普通社債・国債では100を使います。
Excelで#NUM!エラーが出たら、まず何を確認すればよいですか。
決済日が満期日より後になっていないか、frequencyが1・2・4以外の値になっていないか、redemptionやrateにマイナス値が入っていないかの3点をまず確認してください。日付列のコピー時に参照がずれるケースが多く見られます。
まとめ
PRICE・YIELD・DURATION・MDURATIONは、決済日・満期日・利率・利回り(または価格)・償還価額・頻度・基準という共通の材料を、目的に応じて入力と出力を入れ替えながら使う一連の関数です。設例では、クーポン年率0.70%・利回り1.10%・残存5年の社債の価格が98.0592円、修正デュレーションが4.8944年になることをExcel上で確認し、±10bp程度の金利変化であれば修正デュレーションによる近似が実際の価格変化とほぼ一致することも確かめました。一方で、償還価額や利率の単位を間違えると価格が桁違いの値になり、決済日が利払日からずれる銘柄では基準の選び方と経過利子の扱いが実際の受渡代金に影響します。関数そのものは7つの引数を渡すだけの単純な仕組みですが、その単純さゆえに、単位や日付の取り違えがそのまま誤った結論につながる点に注意が必要です。
同じ手順を、実際に手を動かして確認する
今回の設例と同じ引数構成をExcelに自分で入力し、redemptionやfrequencyの値をわざと変えて価格がどう崩れるかを試してみると、事故のパターンが体に入りやすくなります。
出典・参考(2026年9月確認)
- Microsoft サポート
「P RICE 関数」 support.microsoft.com - Microsoft サポート
「Y IELD 関数」 support.microsoft.com - Microsoft サポート
「D URATION 関数」 support.microsoft.com - Microsoft サポート
「M DURATION 関数」 support.microsoft.com - Microsoft サポート
「A CCRINT 関数」 support.microsoft.com - 日本証券業協会「(債券の)経過利子」 jsda.or.jp
- 本文中のPRICE・YIELD・DURATION・MDURATIONおよびACCRINTの計算結果は、Excel(Microsoft 365、COM経由)で実際に数式を入力して得られた値です。
※本記事は教育目的の一般的な解説であり、法務・税務・投資助言ではありません。設例は理解のための仮設例です。