ExcelのODDFPRICE関数の使い方|最初の利払期間が端数の証券の価格
債券の最初の利払期間が通常より短かったり長かったりする場合、標準のPRICE関数では正確な価格が計算できません。このような端数第1期間(Odd First Period)を持つ証券に対応した関数が ODDFPRICE です。
ExcelのODDFPRICE関数を使えば、発行日から最初の利払日までの期間が標準ではない証券の理論価格を計算できます。国内外の新発債や途中参加型の債券でよく使われますよ。
この記事では、ODDFPRICE関数の構文・引数・計算例と、PRICE・ODDLPRICE との使い分けを解説します。
ExcelのODDFPRICE関数とは?
ExcelのODDFPRICE関数(読み方:オッド・エフ・プライス)は財務関数の一つです。最初の利払期間が端数(短端数または長端数)になっている証券の価格を、額面100円あたりで返します。
関数名の「ODD」は「端数・変則」を意味し、「F」は「First(最初)」、「PRICE」は「価格」を表します。つまり「最初の利払期間が端数の場合の価格計算」です。
端数第1期間(Odd First Period)とは
通常の債券は、発行日から最初の利払日まで1クーポン期間分(例: 半年払いなら約6か月)です。しかし実際の市場では、次のようなケースが多く発生します。
- 短端数(Short First Period): 最初の利払日まで1クーポン期間より短い
- 例: 半年払い債で発行日が4月1日、最初の利払日が9月15日(約5.5か月)
- 長端数(Long First Period): 最初の利払日まで1クーポン期間より長い
- 例: 半年払い債で発行日が4月1日、最初の利払日が翌年3月15日(約11.5か月)
ODDFPRICE はどちらの端数にも対応しています。
ODDFPRICE が必要な場面
- 新発債の発行日と最初の利払日が半端な間隔になっているとき
- 既発債を発行途中から購入する場合の価格確認
- 国際市場の債券(クーポン期間が不規則になりやすい)の評価
- PRICE関数が使えない(発行日と第1クーポン日が不規則)ケース
ODDFPRICE関数の構文と引数
ODDFPRICE関数の構文は次のとおりです。
=ODDFPRICE(settlement, maturity, issue, first_coupon, rate, yld, redemption, frequency, [basis])
引数は9つで、basis のみ省略可能です。PRICE関数(7引数)と比べて issue(発行日)と first_coupon(最初の利払日)が追加されています。
| 引数 | 必須/省略 | 意味 |
|---|---|---|
| settlement | 必須 | 受渡日(証券の購入が完了する日) |
| maturity | 必須 | 満期日(償還日)。settlementより後の日付 |
| issue | 必須 | 発行日。settlementより前の日付 |
| first_coupon | 必須 | 最初の利払日。issueより後の日付 |
| rate | 必須 | 証券の年間クーポン利率(小数で指定。5%なら 0.05) |
| yld | 必須 | 証券の年間利回り(小数で指定。4%なら 0.04) |
| redemption | 必須 | 額面100円あたりの償還価格(通常は 100) |
| frequency | 必須 | 年間利払回数(1=年1回・2=半年払い・4=四半期払い) |
| basis | 省略可 | 日数計算基準(0〜4の整数。既定は0) |
各引数の日付関係
引数の日付間には次の制約があります。
issue ≦ settlement < maturity
issue < first_coupon
first_coupon が settlement より前でも後でもよいですが、通常は settlement に近いクーポン日を指定します。
rate と yld の違い
- rate(クーポン利率): 証券に定められた年間の利率。満期まで変わらない
- yld(利回り): 市場での要求利回り。価格を変動させる要因
rate > yld なら価格はパー(100)より高く、rate < yld なら低くなります。
basis 引数の選び方
| 値 | 名称 | 主な対象 |
|---|---|---|
| 0(既定) | US 30/360 (NASD) | 米国社債 |
| 1 | Actual/Actual | 米国国債 |
| 2 | Actual/360 | 米国マネーマーケット |
| 3 | Actual/365 | 日本国内債券 |
| 4 | European 30/360 | 欧州社債 |
frequency 引数の選び方
| 値 | 利払頻度 | 主な対象 |
|---|---|---|
| 1 | 年1回払い | 一部の社債・外国債 |
| 2 | 半年払い | 国債・多くの社債 |
| 4 | 四半期払い | 地方債・一部社債 |
ODDFPRICE関数の基本的な使い方
実例で動きを確認しましょう。
例1: 短端数(短い初回クーポン期間)
- 受渡日: 2026/5/7
- 満期日: 2030/11/15
- 発行日: 2026/2/15
- 最初の利払日: 2026/8/15(通常の半年払いより短い・短端数)
- クーポン利率: 2%
- 利回り: 2.5%
- 償還価格: 100
- frequency: 2(半年払い)
- basis: 1
=ODDFPRICE(DATE(2026,5,7), DATE(2030,11,15), DATE(2026,2,15), DATE(2026,8,15), 0.02, 0.025, 100, 2, 1)
クーポン利率(2%)が利回り(2.5%)を下回るため、価格はパー(100)より低くなります。
例2: 長端数(長い初回クーポン期間)
- 受渡日: 2026/5/7
- 満期日: 2031/3/15
- 発行日: 2025/9/15
- 最初の利払日: 2026/9/15(約1年後・長端数)
- クーポン利率: 3%
- 利回り: 2.5%
- 償還価格: 100
- frequency: 2(半年払い)
- basis: 1
=ODDFPRICE(DATE(2026,5,7), DATE(2031,3,15), DATE(2025,9,15), DATE(2026,9,15), 0.03, 0.025, 100, 2, 1)
クーポン利率(3%)が利回り(2.5%)を上回るため、価格はパー(100)より高くなります。
例3: セル参照を使った書き方
実務では引数をセル参照にすると、複数銘柄の価格比較が楽になります。
| セル | 内容 | 値 |
|---|---|---|
| B2 | 受渡日 | 2026/5/7 |
| B3 | 満期日 | 2030/11/15 |
| B4 | 発行日 | 2026/2/15 |
| B5 | 最初の利払日 | 2026/8/15 |
| B6 | クーポン利率 | 0.02 |
| B7 | 利回り | 0.025 |
| B8 | 償還価格 | 100 |
| B9 | frequency | 2 |
| B10 | basis | 1 |
数式は =ODDFPRICE(B2,B3,B4,B5,B6,B7,B8,B9,B10) です。利回り(B7)を変更すれば価格が連動して再計算されます。
ODDFPRICE・PRICE・ODDLPRICE の使い分け
端数利払期間の有無と位置によって、使う関数が変わります。
| 関数 | 端数の位置 | 補足 |
|---|---|---|
| PRICE | なし(標準) | 全クーポン期間が均等な債券 |
| ODDFPRICE | 最初の利払期間のみ端数 | 発行日〜第1クーポン日が不規則 |
| ODDLPRICE | 最後の利払期間のみ端数 | 最後のクーポン期間〜満期が不規則 |
実務では最初の利払期間に端数が出るケースが多いため、ODDFPRICE の出番が多くなります。最後の期間に端数が出る場合は ODDLPRICE を使います。両方端数の場合は、まれですがアナリティカルな計算が必要です。
PRICE 関数との引数の違い
PRICE 関数は引数が7つです。
=PRICE(settlement, maturity, rate, yld, redemption, frequency, [basis])
ODDFPRICE は issue(発行日)と first_coupon(最初の利払日)が追加された9引数です。この2つの引数があることで、端数期間の長さを正確に計算できます。
計算の仕組み(概要)
ODDFPRICE の計算は PRICE と基本的な考え方は同じで、将来のキャッシュフローを利回りで割り引いて合計します。端数期間の扱いがポイントです。
短端数の計算ロジック
短端数(最初のクーポン期間が1標準期間より短い)の場合、最初のクーポンは期間に比例した金額になります。
最初のクーポン額 ≒ クーポン額 × (実際の日数 / 標準クーポン期間の日数)
以降のクーポンは通常どおりの金額です。各キャッシュフローを(1 + 利回り/频度)で割り引いた現在価値の合計が価格になります。
長端数の計算ロジック
長端数(最初のクーポン期間が1標準期間より長い)の場合、最初のクーポンは標準期間の1.5倍などになることがあります。この端数処理が PRICE 関数では対応できない部分です。
実務での活用例
新発債の価格確認
国内で新規に発行される債券は、発行日と最初の利払日の間隔が半端になることがあります。たとえば発行日が5月中旬で利払日が3月と9月の場合、最初の利払日まで約4か月(短端数)になります。ODDFPRICE を使えば、このような新発債の受渡日時点の適正価格が計算できます。
外国債の評価
米国や欧州の債券は日本国債より端数第1期間が発生しやすい市場慣行があります。basis と frequency を市場に合わせて設定することで、ODDFPRICE が対応できます。
利回りの感応度分析
yld(利回り)を変化させながら ODDFPRICE を計算すると、価格と利回りの関係(デュレーション的な分析)ができます。データテーブル機能と組み合わせると、利回りシナリオ別の価格一覧が作れます。
ODDFYIELD との組み合わせ
価格がわかっていて利回りを求めたい場合は ODDFYIELD 関数(ODDFPRICE の逆関数)を使います。
ODDFPRICE → 利回りを入力して価格を算出
ODDFYIELD → 価格を入力して利回りを算出
関連する財務関数の全体像
端数利払期間を扱う関数は ODDFPRICE 以外にもあります。
| 関数 | 用途 |
|---|---|
| ODDFPRICE | 第1期間端数の証券の価格 |
| ODDFYIELD | 第1期間端数の証券の利回り |
| ODDLPRICE | 最終期間端数の証券の価格 |
| ODDLYIELD | 最終期間端数の証券の利回り |
| PRICE | 標準(端数なし)の証券の価格 |
| YIELD | 標準(端数なし)の証券の利回り |
また、クーポン日のスケジュール管理には COUP 系関数を使います。
よくあるエラーと対処法
#NUM! エラー
| 原因 | 対処法 |
|---|---|
| settlement ≧ maturity | 受渡日が満期日より前になるよう修正 |
| issue > settlement | 発行日が受渡日より前になるよう確認 |
| first_coupon ≦ issue | 最初の利払日が発行日より後になるよう修正 |
| rate や yld が負の値 | 正の小数で指定(例: 5% → 0.05) |
| frequency が 1・2・4 以外 | 1、2、4 のいずれかを指定 |
| basis が 0〜4 以外 | 0〜4の整数を指定 |
#VALUE! エラー
引数の日付が日付として認識されていない場合に発生します。文字列(”2026/5/7″)を直接渡すと発生します。
誤: =ODDFPRICE("2026-05-07", "2030-11-15", ...)
正: =ODDFPRICE(DATE(2026,5,7), DATE(2030,11,15), ...)
DATE関数で渡すか、日付として整形済みのセル参照を使ってください。
#NAME? エラー
「ODDFPRICE」のスペルミスが原因です。「ODDFRPICE」「ODD_FPRICE」のような表記は存在しません。Excel の入力候補(IntelliSense)から選ぶと安全です。
結果が想定と大きく違うとき
- rate と yld の単位ミス(パーセント表記 5 を 0.05 とすべきところを 5 にしている)→ 小数で指定
- basis の市場慣行違い → 国内債は basis=3、米国国債は basis=1
- first_coupon の日付ミス → 端数が短端数か長端数かで挙動が変わる
- settlement が issue より前になっている → 引数の日付順序を確認
まとめ
ExcelのODDFPRICE関数は、最初の利払期間が端数(短期・長期)になっている証券の価格を計算する財務関数です。本記事のポイントを振り返ります。
- 構文:
=ODDFPRICE(settlement, maturity, issue, first_coupon, rate, yld, redemption, frequency, [basis]) - 戻り値: 額面100円あたりの理論価格(実数)
- 特徴: 第1クーポン期間が短端数・長端数のどちらにも対応
- 対象: 新発債・端数第1期間を持つ利付債
- PRICE との違い:
issue(発行日)とfirst_coupon(最初の利払日)の2引数が追加 - frequency: 1(年1回)・2(半年)・4(四半期)のみ有効
- basis: 国内債は basis=3、米国国債は basis=1、米国社債は basis=0
PRICE関数・YIELD関数・COUPNCD関数・COUPNUM関数・COUPDAYBS関数・PRICEMAT関数・YIELDMAT関数もあわせて確認してみてください。端数期間の扱いを理解すれば、複雑な債券の価格計算も Excel で対応できるようになりますよ。
