「満期前の最後の利払い期間だけ端数になっている債券を、途中で買い直したら利回りっていくらになるの?」——そんな場面で使うのが ODDLYIELD 関数です。
通常の YIELD 関数は、全期間の利払いが均等に揃った債券を前提にしています。満期と直前の利払い日がキリよく揃わない債券では、そのまま使うと正確な利回りが出せませんよ。
この記事では、スプレッドシートの ODDLYIELD 関数の使い方を、構文・計算例・よくあるエラーの対処まで同僚に教える感覚で解説します。ODDLPRICE・ODDFYIELD との使い分けも整理しているので、債券分析や財務モデリングの実務にぜひ活用してください。
スプレッドシートの ODDLYIELD 関数とは?
スプレッドシートの ODDLYIELD 関数は、最終利払い期間が不定期(通常と異なる)な債券の、年間利回りを計算する財務関数です。
関数名の ODDLYIELD は “Odd Last Period Yield”(不定期最終期間の利回り)を略したもので、市場で観測された価格から利回りを逆算するときに使います。
不定期最終利払い期間(Odd Last Period)とは
通常の債券は、各利払い期間がほぼ等しい長さです。たとえば半年払いの債券なら、各利払い期間は約6か月ですね。
しかし、既存債券の満期日を途中で変更した場合などでは、直前の利払い日から満期日までの期間が通常のサイクルと揃わないことがあります。
| 状況 | 説明 |
|---|---|
| 短い最終期間(Short Last Period) | 直前利払日から満期日までが、通常の利払い間隔より短い |
| 長い最終期間(Long Last Period) | 直前利払日から満期日までが、通常の利払い間隔より長い |
この「最終だけ期間が違う債券」を、観測された価格から利回りに変換するのが ODDLYIELD です。
ODDLYIELD 関数の構文と引数
ODDLYIELD 関数の構文は次のとおりです。
=ODDLYIELD(決済日, 満期日, 直前利払日, 利率, 価格, 償還価格, 頻度, [日数計算方法])
英語表記だと =ODDLYIELD(settlement, maturity, last_interest, rate, pr, redemption, frequency, [basis]) となります。
| 引数 | 省略 | 説明 |
|---|---|---|
| 決済日(settlement) | 必須 | 債券の受渡日(購入が完了する日)。DATE 関数での指定を推奨 |
| 満期日(maturity) | 必須 | 債券の満期日 |
| 直前利払日(last_interest) | 必須 | 最後から2番目の利払い日(=最終利払い期間の開始日) |
| 利率(rate) | 必須 | 年間クーポンレート。小数で指定(例: 3.75% → 0.0375) |
| 価格(pr) | 必須 | 額面100あたりの市場価格(例: 額面100に対して99.875で取引なら99.875) |
| 償還価格(redemption) | 必須 | 額面100あたりの償還価格(通常は100) |
| 頻度(frequency) | 必須 | 年間利払い回数(1=年1回、2=半年払い、4=四半期払い) |
| 日数計算方法(basis) | 省略可 | 0=US/30/360(デフォルト)、1=Actual/Actual、2=Actual/360、3=Actual/365、4=欧州/30/360 |
ODDLPRICE とほぼ同じ構成ですが、第5引数が「利回り」ではなく「価格」 に変わっている点に注意してください。価格を入れて利回りを返す、という逆方向の関数ですね。
日数計算方法(basis)の選び方
| 値 | 日数基準 | 主な使用場面 |
|---|---|---|
| 0 | US/30/360 | 米国社債(デフォルト) |
| 1 | Actual/Actual | 米国国債・欧州国債 |
| 2 | Actual/360 | ユーロ建て短期証券 |
| 3 | Actual/365 | 英国国債 |
| 4 | 欧州/30/360 | 欧州社債 |
省略すると 0(US/30/360)が適用されます。
日付順の制約
ODDLYIELD では、以下の日付順を必ず満たす必要があります。
満期日 > 決済日 > 直前利払日
この順序を守らないと #NUM! エラーになります。日付入力でエラーが出たときは、まずこの順序を疑ってみてください。
ODDLYIELD 関数の基本的な使い方
Microsoft 公式サンプルで計算する
Microsoft 公式ドキュメントで紹介されている、半年払いの社債サンプルです。
| セル | 項目 | 値 |
|---|---|---|
| B2 | 決済日 | 2008/4/20 |
| B3 | 満期日 | 2008/6/15 |
| B4 | 直前利払日 | 2007/12/24 |
| B5 | 利率(クーポン) | 0.0375(3.75%) |
| B6 | 価格 | 99.875 |
| B7 | 償還価格 | 100 |
| B8 | 頻度(半年払い) | 2 |
| B9 | 日数計算方法 | 0(US/30/360) |
=ODDLYIELD(B2, B3, B4, B5, B6, B7, B8, B9)
結果: 約 0.0452(= 4.52%)
価格 99.875 が額面 100 をわずかに下回っている(ディスカウント)ので、クーポン率 3.75% を上回る利回り 4.52% が返ってきますよ。
DATE 関数を使って直接指定する
=ODDLYIELD(
DATE(2008,4,20),
DATE(2008,6,15),
DATE(2007,12,24),
0.0375,
99.875,
100,
2,
0
)
日付を直接入力する場合は、DATE 関数を使うと確実です。文字列で “2008/4/20” と書くと、ロケール設定によっては #VALUE! エラーになることがありますよ。
価格がクーポン率を上回る場合(プレミアム債)
次は同じ条件で、価格を額面より高く設定した例です。
=ODDLYIELD(DATE(2008,4,20), DATE(2008,6,15), DATE(2007,12,24), 0.0375, 100.25, 100, 2, 0)
結果: 約 0.0126(= 1.26%)
価格 100.25 が額面 100 を上回る(プレミアム債)なので、利回りはクーポン率 3.75% を下回る 1.26% まで低下します。価格と利回りが逆方向に動く関係がわかりやすいサンプルですね。
関連関数との使い分け
ODDLYIELD と組み合わせて使う関連関数を整理します。
ODDF / ODDL 系 4 関数
| 関数 | 対象期間 | 返す値 | 主な用途 |
|---|---|---|---|
| ODDLYIELD | 不定期最終利払い | 利回り | 最終期間が不定期な債券の利回りを求める |
| ODDLPRICE | 不定期最終利払い | 価格 | 最終期間が不定期な債券の価格を求める |
| ODDFYIELD | 不定期初回利払い | 利回り | 初回期間が不定期な債券の利回りを求める |
| ODDFPRICE | 不定期初回利払い | 価格 | 初回期間が不定期な債券の価格を求める |
「F=First(初回)、L=Last(最終)、PRICE=価格、YIELD=利回り」と覚えると整理しやすいですよ。
初回期間が不定期な債券の価格・利回り計算については、スプレッドシートのODDFYIELD関数の使い方 と スプレッドシートのODDFPRICE関数の使い方 も合わせて参考にしてください。
ODDLYIELD と ODDLPRICE の関係
ODDLYIELD と ODDLPRICE は逆関数ペアの関係です。
| 入力 | 出力 | 関数 |
|---|---|---|
| 価格 → | 利回り | ODDLYIELD |
| 利回り → | 価格 | ODDLPRICE |
同じ債券条件で ODDLPRICE の結果を ODDLYIELD に入れ直すと、元の利回りに戻ります。計算内部では同じ現在価値モデルを使い、ODDLYIELD はニュートン法で利回りを反復的に逆算しています。ODDLPRICE 側の詳細は スプレッドシートのODDLPRICE関数の使い方 で解説しているので、ペアで確認しておきましょう。
通常の YIELD 関数との違い
| 状況 | 使う関数 |
|---|---|
| 全期間が均等な利払い期間の債券 | YIELD 関数 |
| 初回利払い期間だけが不定期な債券 | ODDFYIELD 関数 |
| 最終利払い期間だけが不定期な債券 | ODDLYIELD 関数 |
債券の利回りを出すときは、「満期日=直前利払日+通常間隔」で揃っているかを最初にチェックしましょう。揃っていなければ YIELD ではなく ODDLYIELD が正解です。
よくあるエラーと対処法
#NUM! エラー
最も多いエラーです。以下のケースで発生します。
| 発生条件 | 対処法 |
|---|---|
| 決済日 ≥ 満期日 | 決済日が満期日より前になるよう修正する |
| 直前利払日 ≥ 決済日 | 直前利払日は決済日より前に設定する |
| 利率 < 0 | クーポンレートは 0 以上の小数で指定する |
| 価格 ≤ 0 | 価格は 0 より大きい値で指定する |
| 償還価格 ≤ 0 | 償還価格は 0 より大きい値で指定する |
| 頻度が 1・2・4 以外 | 年間利払い回数は 1・2・4 のいずれかを指定する |
| 日数計算方法が 0〜4 以外 | basis は 0〜4 の整数を指定する |
#VALUE! エラー
引数に日付・数値として解釈できない値が入っている場合に発生します。日付を直接入力するときは DATE(2008,4,20) のように DATE 関数を使うと確実ですよ。文字列の “2008/4/20” はロケール依存で失敗することがあります。
#NAME? エラー
関数名のスペルミスが原因です。ODDLYILD・ODD_L_YIELD・ODDL YIELD などは存在しない関数名です。正しくは ODDLYIELD(アンダースコアやスペースなし)ですよ。
Excel との互換性
ODDLYIELD 関数は、Excel 2007 以降・Google スプレッドシート・LibreOffice Calc で同じ計算結果を返します。Excel ファイル(.xlsx)をスプレッドシートで開いてもそのまま動作しますよ。
内部計算はニュートン法による反復(最大100回)で利回りを逆算しているため、プラットフォームごとの微小な丸め差が出るケースがあります。実務で厳密な一致が必要な場合は、計算基準(basis)を明示して結果を確認してください。
まとめ
スプレッドシートの ODDLYIELD 関数は、最終利払い期間が通常と異なる(不定期な)債券の利回りを計算する財務関数です。ポイントをまとめておきます。
- 引数は 決済日・満期日・直前利払日・利率・価格・償還価格・頻度 の7つ(日数計算方法は省略可)
- 市場価格から年間利回り(小数) を逆算する関数で、ODDLPRICE の逆関数ペア
- 既存債券の満期日変更などで直前利払日と満期日の間隔が通常と異なる債券の利回り計算に使う
- 頻度は 1(年1回)・2(半年払い)・4(四半期払い) のみ指定可能
- 日付順制約 満期日 > 決済日 > 直前利払日 を守らないと
#NUM!エラー - 初回期間が不定期な債券には ODDFYIELD 関数 を使う
- Excel 2007 以降・LibreOffice Calc との互換性があり、.xlsx ファイルをそのまま開いても動作する
債券分析ツールや財務モデルの中で、満期直前の期間調整が必要な債券の利回り評価に ODDLYIELD を活用してください。
