ExcelのODDLPRICE関数の使い方|最後の利払期間が端数の証券の価格

スポンサーリンク

債券の最後の利払期間が通常より短かったり長かったりする場合、標準のPRICE関数では正確な価格が計算できません。このような端数最終期間(Odd Last Period)を持つ証券に対応した関数が ODDLPRICE です。

ExcelのODDLPRICE関数を使えば、満期前最終期間が標準クーポン長と異なる証券の理論価格を計算できます。コール条項が発動した債券や、満期日を後ろ倒しした債券などで活躍しますよ。

この記事では、ODDLPRICE関数の構文・引数・計算例と、PRICE・ODDFPRICE関数との使い分けを解説します。

ExcelのODDLPRICE関数とは?

ExcelのODDLPRICE関数(読み方:オッド・エル・プライス)は財務関数の一つです。最後の利払期間が端数(短端数または長端数)になっている証券の価格を、額面100円あたりで返します

関数名の「ODD」は「端数・変則」を意味し、「L」は「Last(最後)」、「PRICE」は「価格」を表します。つまり「最後の利払期間が端数の場合の価格計算」ですね。

端数最終期間(Odd Last Period)とは

通常の債券は、各利払期間の長さがほぼ均一です。たとえば半年払い債券なら、各クーポン期間は約6か月になります。

しかし実務では、次のようなケースで最終期間だけ標準長と異なる債券が登場します。

  • 短端数(Short Last Period): 最終クーポン期間が標準期間より短い
    • 例: 半年払い債で最終クーポン日が9月15日、満期日が翌1月10日(約4か月)
  • 長端数(Long Last Period): 最終クーポン期間が標準期間より長い
    • 例: 半年払い債で最終クーポン日が9月15日、満期日が翌年8月10日(約11か月)

ODDLPRICE はどちらの端数にも対応しています。

ODDLPRICE が必要な場面

  • コール条項が発動して満期日が前倒しになった債券の価格確認
  • 満期日を後ろ倒しに変更した既発債の評価
  • シンキングファンド方式で最終償還日が個別調整される債券
  • 私募債や新興市場債券で満期日が標準サイクルと合わないケース

ODDLPRICE関数の構文と引数

ODDLPRICE関数の構文は次のとおりです。

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

引数は8つで、basis のみ省略可能です。ODDFPRICE関数(9引数)と比べて、issuefirst_coupon の代わりに last_interest(直前利払日)が1つだけ指定されます。

引数必須/省略意味
settlement必須受渡日(証券の購入が完了する日)
maturity必須満期日(償還日)。settlement より後の日付
last_interest必須直前利払日(最終利払期間の開始日)。settlement より前の日付
rate必須証券の年間クーポン利率(小数で指定。5%なら 0.05)
yld必須証券の年間利回り(小数で指定。4%なら 0.04)
redemption必須額面100円あたりの償還価格(通常は 100)
frequency必須年間利払回数(1=年1回・2=半年払い・4=四半期払い)
basis省略可日数計算基準(0〜4の整数。既定は0)

各引数の日付関係

引数の日付間には次の制約があります。

last_interest < settlement < maturity

時系列で並べるとこうなります。

[直前利払日] ―→ [受渡日] ―→ [満期日]
last_interest   settlement   maturity

つまり「直前利払日と満期日の間に受渡日がある」状態です。この順序を守らないと #NUM! エラーになります。

last_interest(直前利払日)とは

last_interest は「最後から2番目の利払日」、つまり最終クーポン期間の開始日を指します。

たとえば半年払いで満期が2027年1月10日、最後から2番目の利払日が2026年7月10日なら、last_interest は 2026/7/10 を指定します。最終クーポン期間(2026/7/10〜2027/1/10)の長さがちょうど6か月ではない場合に、ODDLPRICE が使えるわけですね。

rate と yld の違い

  • rate(クーポン利率): 証券に定められた年間の利率。満期まで変わらない
  • yld(利回り): 市場での要求利回り。価格を変動させる要因

rate > yld なら価格はパー(100)より高く、rate < yld なら低くなります。

basis 引数の選び方

名称主な対象
0(既定)US 30/360 (NASD)米国社債
1Actual/Actual米国国債
2Actual/360米国マネーマーケット
3Actual/365日本国内債券
4European 30/360欧州社債

frequency 引数の選び方

利払頻度主な対象
1年1回払い一部の社債・外国債
2半年払い国債・多くの社債
4四半期払い地方債・一部社債

ODDLPRICE関数の基本的な使い方

実例で動きを確認しましょう。

例1: 短端数(短い最終クーポン期間)

Microsoft公式リファレンスのサンプル値です。

  • 受渡日: 2008/2/7
  • 満期日: 2008/6/15
  • 直前利払日: 2007/10/15
  • クーポン利率: 3.75%
  • 利回り: 4.05%
  • 償還価格: 100
  • frequency: 2(半年払い)
  • basis: 0(US 30/360)
=ODDLPRICE(DATE(2008,2,7), DATE(2008,6,15), DATE(2007,10,15), 0.0375, 0.0405, 100, 2, 0)

クーポン利率(3.75%)が利回り(4.05%)を下回るため、価格はパー(100)よりわずかに低い値(約99.88)になります。

例2: 長端数(長い最終クーポン期間)

  • 受渡日: 2026/5/7
  • 満期日: 2027/3/15
  • 直前利払日: 2025/9/15(次回の予定利払日2026/3/15を超えて満期まで継続)
  • クーポン利率: 3%
  • 利回り: 2.5%
  • 償還価格: 100
  • frequency: 2(半年払い)
  • basis: 1(Actual/Actual)
=ODDLPRICE(DATE(2026,5,7), DATE(2027,3,15), DATE(2025,9,15), 0.03, 0.025, 100, 2, 1)

クーポン利率(3%)が利回り(2.5%)を上回るため、価格はパー(100)より高くなります。

例3: セル参照を使った書き方

実務では引数をセル参照にすると、複数銘柄の価格比較が楽になります。

セル内容
B2受渡日2026/5/7
B3満期日2027/1/10
B4直前利払日2026/7/10
B5クーポン利率0.025
B6利回り0.022
B7償還価格100
B8frequency2
B9basis3

数式は =ODDLPRICE(B2,B3,B4,B5,B6,B7,B8,B9) です。利回り(B6)を変更すれば価格が連動して再計算されます。日本国内債券を扱うときは basis を 3(Actual/365)にする慣行があるので覚えておきましょう。

ODDLPRICE・PRICE・ODDFPRICE の使い分け

端数利払期間の有無と位置によって、使う関数が変わります。

関数端数の位置補足
PRICEなし(標準)全クーポン期間が均等な債券
ODDFPRICE最初の利払期間のみ端数発行日〜第1クーポン日が不規則
ODDLPRICE最後の利払期間のみ端数最終クーポン日〜満期が不規則

実務でODDLPRICEが必要になる場面は限定的ですが、コール条項の発動や満期日変更がある債券では必須の関数です。両端が端数の場合は、まれですがアナリティカルな計算が必要になります。

ODDFPRICE との引数の違い

ODDFPRICE は引数が9つです。

=ODDFPRICE(settlement, maturity, issue, first_coupon, rate, yld, redemption, frequency, [basis])

ODDLPRICE は issue(発行日)と first_coupon(最初の利払日)が不要で、代わりに last_interest(直前利払日)を1つ指定します。最終期間の起点は last_interest、終点は maturity なので、引数が1つ少なく済みます。

PRICE 関数との引数の違い

PRICE 関数は引数が7つです。

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

ODDLPRICE は last_interest が追加された8引数です。この引数があることで、最終期間の長さを正確に計算できます。

計算の仕組み(概要)

ODDLPRICE の計算は PRICE と基本的な考え方は同じで、将来のキャッシュフローを利回りで割り引いて合計します。違いは最終期間の扱いです。

短端数の計算ロジック

短端数(最終クーポン期間が1標準期間より短い)の場合、最終クーポンは期間に比例した金額になります。

最終クーポン額 ≒ 標準クーポン額 × (実際の日数 / 標準クーポン期間の日数)

満期日に支払われるのは「最終クーポン額 + 償還額」で、この合計を受渡日まで割り引いた現在価値が価格に反映されます。

長端数の計算ロジック

長端数(最終クーポン期間が1標準期間より長い)の場合、最終クーポンは複数のサブ期間に分割して計算されます。たとえば1.5期間分の長さなら、1標準期間分のクーポンに加えて、半端な部分のクーポンが上乗せされます。この処理は PRICE 関数では対応できません。

実務での活用例

コール条項発動債の価格確認

コーラブル債(発行体が満期前に償還できる債券)でコール条項が発動されると、当初予定より早い日が満期日になります。最終クーポン期間が標準より短くなるため、ODDLPRICE で価格を計算します。

満期日を後ろ倒しした既発債の評価

既存債券の満期日を交渉で延長した場合、最終クーポン期間が長端数になります。延長後の理論価格を ODDLPRICE で算出することで、保有債券の評価額を更新できますよ。

シンキングファンド方式の債券

減債基金方式の債券で最終償還日が個別調整される場合、ODDLPRICE が役立ちます。償還スケジュールごとに価格を再計算したいときに使ってください。

ODDLYIELD との組み合わせ

価格がわかっていて利回りを求めたい場合は ODDLYIELD 関数(ODDLPRICE の逆関数)を使います。

ODDLPRICE → 利回りを入力して価格を算出
ODDLYIELD → 価格を入力して利回りを算出

関連する財務関数の全体像

端数利払期間を扱う関数は ODDLPRICE 以外にもあります。

関数用途
ODDFPRICE第1期間端数の証券の価格
ODDFYIELD第1期間端数の証券の利回り
ODDLPRICE最終期間端数の証券の価格
ODDLYIELD最終期間端数の証券の利回り
PRICE標準(端数なし)の証券の価格
YIELD標準(端数なし)の証券の利回り

クーポン日のスケジュール管理には COUP 系関数を使います。

関数用途
COUPPCD直前の利払日
COUPNCD次回の利払日
COUPNUM残りのクーポン回数
COUPDAYBS直前利払日から受渡日までの日数

よくあるエラーと対処法

#NUM! エラー

原因対処法
日付順制約違反(last_interest < settlement < maturity を満たさない)各引数の日付を見直す。特に last_interest が settlement より前か確認
frequency が 1, 2, 4 以外1(年1回)・2(半年)・4(四半期)のいずれかを指定
basis が 0〜4 以外0〜4の整数を指定
rate が負の値利率は0以上にする
yld が負の値利回りは0以上にする
redemption が0以下通常は100を指定

#VALUE! エラー

原因対処法
日付引数が日付として認識されないDATE関数で指定するか、日付形式のセルを参照する
数値引数に文字列が入っているrate・yld・redemption などを数値に変換

結果が異常値(負の価格・極端に大きい値)になる場合

原因対処法
frequency と市場慣行が合わない半年払い債なら 2、四半期払い債なら 4 を指定
basis と市場慣行が合わない日本国内債券なら 3、米国国債なら 1 が一般的
rate / yld の単位ミス(%表記と小数表記の混同)5%なら 0.05、4.05%なら 0.0405 のように小数で指定

特に日付順制約の #NUM! は実務でつまずきやすいポイントです。エラーが出たら最初にこの順序を疑ってみてくださいね。

ODDLPRICE関数を使えば、最終期間が不定期な債券の価格計算も正確に行えます。コール条項発動債や満期日変更債に出会ったら、PRICE関数ではなく ODDLPRICE で対応してください。

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