債券の最後の利払期間が通常より短かったり長かったりする場合、標準のYIELD関数では正確な利回りが計算できません。このような端数最終期間(Odd Last Period)を持つ証券の利回りに対応した関数が ODDLYIELD です。
ExcelのODDLYIELD関数を使えば、満期前最終期間が標準クーポン長と異なる証券の理論利回りを計算できます。コール条項が発動した債券や、満期日を後ろ倒しした既発債などで活躍しますよ。
この記事では、ODDLYIELD関数の構文・引数・計算例と、YIELD・ODDFYIELD関数との使い分けを解説します。ODDLPRICE関数との往復チェックも紹介しますね。
ExcelのODDLYIELD関数とは?
ExcelのODDLYIELD関数(読み方:オッド・エル・イールド)は財務関数の一つです。最後の利払期間が端数(短端数または長端数)になっている証券の利回りを、額面100あたりで返します。
関数名の「ODD」は「端数・変則」を意味し、「L」は「Last(最後)」、「YIELD」は「利回り」を表します。つまり「最後の利払期間が端数の場合の利回り計算」ですね。
端数最終期間(Odd Last Period)とは
通常の債券は、各利払期間の長さがほぼ均一です。たとえば半年払い債券なら、各クーポン期間は約6か月になります。
しかし実務では、次のようなケースで最終期間だけ標準長と異なる債券が登場します。
- 短端数(Short Last Period): 最終クーポン期間が標準期間より短い
- 例: 半年払い債で最終クーポン日が9月15日、満期日が翌1月10日(約4か月)
- 長端数(Long Last Period): 最終クーポン期間が標準期間より長い
- 例: 半年払い債で最終クーポン日が9月15日、満期日が翌年8月10日(約11か月)
ODDLYIELD はどちらの端数にも対応しています。
ODDLYIELD が必要な場面
- コール条項が発動して満期日が前倒しになった債券の利回り再計算
- 満期日を後ろ倒しに変更した既発債の利回り評価
- シンキングファンド方式で最終償還日が個別調整される債券
- 私募債や新興市場債券で満期日が標準サイクルと合わないケース
価格はすでにマーケットでわかっていて、そこから現在の利回りを逆算したい場面で使う関数です。
ODDLYIELD関数の構文と引数
ODDLYIELD関数の構文は次のとおりです。
=ODDLYIELD(settlement, maturity, last_interest, rate, pr, redemption, frequency, [basis])
引数は8つで、basis のみ省略可能です。ODDLPRICE関数と引数の数も並びもほぼ同じで、第5引数が yld(利回り)から pr(価格)に置き換わっただけです。
| 引数 | 必須/省略 | 意味 |
|---|---|---|
| settlement | 必須 | 受渡日(証券の購入が完了する日) |
| maturity | 必須 | 満期日(償還日)。settlement より後の日付 |
| last_interest | 必須 | 直前利払日(最終利払期間の開始日)。settlement より前の日付 |
| rate | 必須 | 証券の年間クーポン利率(小数で指定。5%なら 0.05) |
| pr | 必須 | 額面100あたりの証券価格(市場価格) |
| 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か月ではない場合に、ODDLYIELD が活躍するわけですね。
pr と redemption の違い
- pr(価格): 市場で取引されている現時点の価格。額面100あたりの値で指定
- redemption(償還価格): 満期日に支払われる元本。通常は 100
例えば pr が 99.5 の債券は、額面100の証券を市場で 99.5 で買えるという意味です。pr が redemption(100)を下回ると利回りはクーポン利率より高くなります。逆に pr が 100 を上回ると利回りはクーポン利率より低くなります。
basis 引数の選び方
| 値 | 名称 | 主な対象 |
|---|---|---|
| 0(既定) | US 30/360 (NASD) | 米国社債 |
| 1 | Actual/Actual | 米国国債 |
| 2 | Actual/360 | 米国マネーマーケット |
| 3 | Actual/365 | 日本国内債券 |
| 4 | European 30/360 | 欧州社債 |
frequency 引数の選び方
| 値 | 利払頻度 | 主な対象 |
|---|---|---|
| 1 | 年1回払い | 一部の社債・外国債 |
| 2 | 半年払い | 国債・多くの社債 |
| 4 | 四半期払い | 地方債・一部社債 |
ODDLYIELD関数の基本的な使い方
実例で動きを確認しましょう。
例1: 短端数(短い最終クーポン期間)
Microsoft公式リファレンスのサンプル値です。
- 受渡日: 2008/4/20
- 満期日: 2008/6/15
- 直前利払日: 2007/12/24
- クーポン利率: 3.75%
- 価格: 99.875
- 償還価格: 100
- frequency: 2(半年払い)
- basis: 0(US 30/360)
=ODDLYIELD(DATE(2008,4,20), DATE(2008,6,15), DATE(2007,12,24), 0.0375, 99.875, 100, 2, 0)
価格(99.875)がパー(100)よりわずかに低いため、利回りはクーポン利率(3.75%)よりやや高い値(約4.51%)になります。
例2: 長端数(長い最終クーポン期間)
- 受渡日: 2026/5/7
- 満期日: 2027/3/15
- 直前利払日: 2025/9/15(次回の予定利払日2026/3/15を超えて満期まで継続)
- クーポン利率: 3%
- 価格: 100.5
- 償還価格: 100
- frequency: 2(半年払い)
- basis: 1(Actual/Actual)
=ODDLYIELD(DATE(2026,5,7), DATE(2027,3,15), DATE(2025,9,15), 0.03, 100.5, 100, 2, 1)
価格がパーをわずかに上回っているため、利回りはクーポン利率(3%)より少し低い値になります。
例3: セル参照を使った書き方
実務では引数をセル参照にすると、複数銘柄の利回り比較が楽になります。
| セル | 内容 | 値 |
|---|---|---|
| B2 | 受渡日 | 2026/5/7 |
| B3 | 満期日 | 2027/1/10 |
| B4 | 直前利払日 | 2026/7/10 |
| B5 | クーポン利率 | 0.025 |
| B6 | 価格 | 99.8 |
| B7 | 償還価格 | 100 |
| B8 | frequency | 2 |
| B9 | basis | 3 |
数式は =ODDLYIELD(B2,B3,B4,B5,B6,B7,B8,B9) です。価格(B6)を変更すれば利回りが連動して再計算されます。日本国内債券を扱うときは basis を 3(Actual/365)にする慣行があるので覚えておきましょう。
ODDLYIELD・YIELD・ODDFYIELD の使い分け
端数利払期間の有無と位置によって、使う関数が変わります。
| 関数 | 端数の位置 | 補足 |
|---|---|---|
| YIELD | なし(標準) | 全クーポン期間が均等な債券 |
| ODDFYIELD | 最初の利払期間のみ端数 | 発行日〜第1クーポン日が不規則 |
| ODDLYIELD | 最後の利払期間のみ端数 | 最終クーポン日〜満期が不規則 |
実務でODDLYIELDが必要になる場面は限定的ですが、コール条項の発動や満期日変更がある債券では必須の関数です。
ODDFYIELD との引数の違い
ODDFYIELD は引数が9つです。
=ODDFYIELD(settlement, maturity, issue, first_coupon, rate, pr, redemption, frequency, [basis])
ODDLYIELD は issue(発行日)と first_coupon(最初の利払日)が不要で、代わりに last_interest(直前利払日)を1つ指定します。最終期間の起点は last_interest、終点は maturity なので、引数が1つ少なく済みます。
YIELD 関数との引数の違い
YIELD 関数は引数が7つです。
=YIELD(settlement, maturity, rate, pr, redemption, frequency, [basis])
ODDLYIELD は last_interest が追加された8引数です。この引数があることで、最終期間の長さを正確に計算できます。
ODDLPRICE との往復チェック
ODDLYIELD は ODDLPRICE関数 の逆関数です。利回りと価格を双方向で計算できるため、計算結果の妥当性検証に便利ですよ。
| 関数 | 入力 | 出力 |
|---|---|---|
| ODDLPRICE | 利回り yld | 価格 pr |
| ODDLYIELD | 価格 pr | 利回り yld |
逆算検証の手順
価格→利回り、利回り→価格の往復で計算精度を確認できます。
- ODDLYIELD で価格 pr から利回り yld を求める
- その yld を ODDLPRICE に渡して価格 pr’ を逆算する
- pr と pr’ がほぼ一致すれば計算は妥当
数式で書くとこうなります。
ODDLYIELD(..., pr, ..., basis) → yld
ODDLPRICE(..., yld, ..., basis) → pr'
両者の引数(settlement / maturity / last_interest / rate / redemption / frequency / basis)は同じ値を渡してください。
誤差の許容範囲
Excel の財務関数は内部で反復計算を行っているため、わずかな丸め誤差が出ることがあります。実務では |pr - pr'| < 0.001(1bps程度)以内に収まれば一致と見なしてOKです。誤差がそれを超える場合は、引数のどれかが食い違っている可能性が高いので入力値を見直しましょう。
実務での活用例
コール条項発動債の利回り再計算
コーラブル債(発行体が満期前に償還できる債券)でコール条項が発動されると、当初予定より早い日が満期日になります。最終クーポン期間が標準より短くなるため、ODDLYIELD で利回りを計算します。
市場で取引されている価格から「この銘柄を今買うとどれだけの利回りが得られるか」を即座に判定したいときに役立ちます。
満期延長後の既発債の評価
既存債券の満期日を交渉で延長した場合、最終クーポン期間が長端数になります。延長後の理論利回りを ODDLYIELD で算出することで、保有債券の評価を更新できますよ。
シンキングファンド方式の債券
減債基金方式の債券で最終償還日が個別調整される場合、ODDLYIELD が役立ちます。償還スケジュールごとに利回りを再計算したいときに使ってください。
銘柄スクリーニング
複数の端数最終期間債券を並べて利回り比較したいケースでも便利です。市場価格を入力するだけで、各銘柄の利回りが横並びで確認できますよ。
関連する財務関数の全体像
端数利払期間を扱う関数は ODDLYIELD 以外にもあります。
| 関数 | 用途 |
|---|---|
| ODDFPRICE | 第1期間端数の証券の価格 |
| ODDFYIELD | 第1期間端数の証券の利回り |
| ODDLPRICE | 最終期間端数の証券の価格 |
| ODDLYIELD | 最終期間端数の証券の利回り |
| PRICE | 標準(端数なし)の証券の価格 |
| YIELD | 標準(端数なし)の証券の利回り |
クーポン日のスケジュール管理には COUP 系関数を使います。
よくあるエラーと対処法
#NUM! エラー
| 原因 | 対処法 |
|---|---|
日付順制約違反(last_interest < settlement < maturity を満たさない) | 各引数の日付を見直す。特に last_interest が settlement より前か確認 |
| frequency が 1, 2, 4 以外 | 1(年1回)・2(半年)・4(四半期)のいずれかを指定 |
| basis が 0〜4 以外 | 0〜4の整数を指定 |
| rate が負の値 | 利率は0以上にする |
| pr が0以下 | 価格は正の値にする |
| redemption が0以下 | 通常は100を指定 |
| 反復計算が収束しない | 入力値が現実離れしていないか確認 |
#VALUE! エラー
| 原因 | 対処法 |
|---|---|
| 日付引数が日付として認識されない | DATE関数で指定するか、日付形式のセルを参照する |
| 数値引数に文字列が入っている | rate・pr・redemption などを数値に変換 |
結果が異常値(マイナス利回り・極端に大きい値)になる場合
| 原因 | 対処法 |
|---|---|
| frequency と市場慣行が合わない | 半年払い債なら 2、四半期払い債なら 4 を指定 |
| basis と市場慣行が合わない | 日本国内債券なら 3、米国国債なら 1 が一般的 |
| rate / pr の単位ミス(%表記と小数表記の混同) | 5%なら 0.05、4.51%なら 0.0451 のように小数で指定 |
| 価格が現実離れしている | 額面100あたりの値か確認(10000 などは誤入力) |
特に日付順制約の #NUM! は実務でつまずきやすいポイントです。エラーが出たら最初にこの順序を疑ってみてくださいね。
ODDLYIELD関数を使えば、最終期間が不定期な債券の利回り計算も正確に行えます。コール条項発動債や満期日変更債に出会ったら、YIELD関数ではなく ODDLYIELD で対応してください。市場価格から利回りを逆算する場面で、強力な味方になりますよ。
