「発行日が10月15日なのに最初の利払い日は翌年3月1日」――こんな少し変則的な社債や国債の利回りを計算したいとき、通常のYIELD関数では正しい値が出ません。そこで使うのが ODDFYIELD関数 です。
ただ、ODDFYIELD関数は引数がなんと9つもあります。日付の指定順や frequency、basis の選び方で迷う方が多いのが実情です。引数の順序を一つでも間違えると、すぐに #NUM! エラーが返ってきます。
この記事では、ODDFYIELD関数の構文から、初回端数期間がある債券の意味、Microsoft公式サンプルを使った計算例、日付順制約や basis の選び方、よくあるエラーと関連関数との使い分けまでをまとめて整理します。
ExcelのODDFYIELD関数とは?
ExcelのODDFYIELD関数(読み方:オッド・エフ・イールド)は、初回利払い期間が不定期(端数期間)になっている証券の年間利回りを返す財務関数です。関数名は「Odd First Yield(最初の利払いが不規則な利回り)」の略で、文字通り「最初だけ半端な債券」の利回り計算に特化しています。
通常の固定利付債では、発行日から半年なり1年なりの一定間隔で利息が支払われます。ところが、たとえば「10月15日発行で、最初の利払いは翌年3月1日」のような債券だと、発行日から最初の利払い日までが定期的な周期になりません。この最初の半端な期間を 初回端数期間(Odd First Period) と呼びます。
このような債券の利回りを定期利払いの YIELD関数で計算してしまうと、初回の半端な期間が考慮されず、本来の年間利回りからズレた値が出てしまいます。ODDFYIELD関数は、初回端数期間を正しく扱った上で年間利回り(%換算前の小数)を返してくれる関数です。
NOTE
ODDFYIELD関数は Excel 2007 以降で利用できます。Microsoft 365、Excel for Mac、Google スプレッドシートでも同名で同じ動作をします。日本の証券実務では「不定期利払い債」と呼ばれることもあり、特に新発の社債や仕組債で見られます。
ODDFYIELD関数の書き方(構文と引数)
ODDFYIELD関数の構文は次のとおりです。
=ODDFYIELD(settlement, maturity, issue, first_coupon, rate, pr, redemption, frequency, [basis])
引数は9つ(うち basis は省略可)と多めですが、それぞれの意味を押さえれば難しくありません。
| 引数 | 必須 | 説明 |
|---|---|---|
| settlement | 必須 | 受渡日(買い手に証券が渡される日。発行日より後) |
| maturity | 必須 | 満期日(最後に元本が償還される日) |
| issue | 必須 | 発行日 |
| first_coupon | 必須 | 最初の利払い日 |
| rate | 必須 | 年間クーポンレート(小数。5%なら 0.05) |
| pr | 必須 | 額面100あたりの債券価格 |
| redemption | 必須 | 額面100あたりの償還価格(通常は100) |
| frequency | 必須 | 年間利払い回数(1=年1回、2=半年払い、4=四半期払い) |
| basis | 省略可 | 日数計算方法(0〜4。省略時は 0=US 30/360) |
戻り値は年間利回りを小数で返します。たとえば 0.0772 が返ってきたら、年間利回り 7.72% を意味します。セルの表示形式を「パーセンテージ」にしておくと読みやすいです。
TIP
引数が多いので、セルにあらかじめラベル付きで値を並べて、関数からはセル参照で渡すのがおすすめです。後で条件を変えてシミュレーションする際にも便利で、引数の取り違えも防げます。
frequency引数(利払い頻度)の選び方
frequency は年間に何回利息が支払われるかを指定します。指定できる値は3つだけです。
| frequency | 利払い頻度 | 代表的な債券 |
|---|---|---|
| 1 | 年1回 | 欧州系社債、ユーロ債の一部 |
| 2 | 半年に1回(年2回) | 米国国債、日本国債、多くの社債 |
| 4 | 四半期に1回(年4回) | 一部の仕組債、変動利付債 |
日本や米国の標準的な利付債は半年払い(frequency=2)が圧倒的多数です。迷ったらまず2を入れて、目論見書や条件決定通知で利払い回数を確認しましょう。1, 2, 4 以外を指定すると #NUM! エラー が返ります。
basis引数(日数計算方法)の選び方
basis は、利息計算で1年や1か月をどう数えるかを指定する引数です。証券の種類によって慣習が異なるので、目論見書の「日数計算方式」欄を確認するのが確実です。
| basis | 日数計算方法 | 主な用途 |
|---|---|---|
| 0(または省略) | 30/360(米国式) | 米国の社債、地方債 |
| 1 | Actual/Actual(実日数/実日数) | 米国国債、多くの政府債 |
| 2 | Actual/360 | 短期金融商品、CD |
| 3 | Actual/365 | 一部の英国債、円建て短期商品 |
| 4 | 30/360(欧州式) | 欧州の社債(ユーロ債) |
basis に5以上や負の値を指定すると #NUM! エラー になります。実務では「とりあえず 0 で省略」というケースが多いですが、米国国債のように Actual/Actual(basis=1)を使うべき商品もあるので注意してください。
実用例:Microsoft公式サンプルで利回りを計算する
Microsoft 公式ドキュメントの ODDFYIELD関数のサンプル値を使って、実際に計算してみます。次のような社債を想定します。
| 項目 | 値 |
|---|---|
| 受渡日(settlement) | 2008/11/11 |
| 満期日(maturity) | 2021/3/1 |
| 発行日(issue) | 2008/10/15 |
| 最初の利払い日(first_coupon) | 2009/3/1 |
| 年間クーポンレート(rate) | 5.75%(0.0575) |
| 債券価格(pr) | 84.50 |
| 償還価格(redemption) | 100 |
| 利払い頻度(frequency) | 2(半年払い) |
| 日数計算(basis) | 0(US 30/360) |
シートのセル B2:B10 に上から順にこれらの値を入れたとします。日付はそのまま日付として、利率は 0.0575 として入力します。利回りを求める数式は次のようになります。
=ODDFYIELD(B2, B3, B4, B5, B6, B7, B8, B9, B10)
このとき、戻り値はおよそ 0.0772、つまり 年間利回り 7.72% となります。クーポンレートは 5.75% ですが、額面100の債券を 84.50 の割引価格で買っているため、利回りはクーポンレートよりも高くなる、というイメージです。
NOTE
発行日(2008/10/15)から最初の利払い日(2009/3/1)までが約4.5か月で、半年払いの「半年」と一致しないため、これは初回端数期間ありの債券です。通常のYIELD関数で計算すると、この4.5か月分が考慮されず、利回りがやや低めに出てしまいます。
日付順制約(最重要ポイント)
ODDFYIELD関数で最も間違いやすいのが日付の順序です。次の不等式を 必ず 満たす必要があります。
maturity > first_coupon > settlement > issue
つまり「発行日 → 受渡日 → 最初の利払い日 → 満期日」の順に時系列で並んでいないとなりません。一つでも順序が崩れると即 #NUM! エラーになります。
| 日付 | 意味 | 順序 |
|---|---|---|
| issue(発行日) | 債券が発行された日 | 一番古い |
| settlement(受渡日) | 投資家に証券が引き渡された日 | 2番目 |
| first_coupon(最初の利払い日) | 最初に利息が支払われた日 | 3番目 |
| maturity(満期日) | 元本が償還される日 | 一番未来 |
WARNING
日付順違反は #NUM! エラーになるので、ぱっと見ではどの引数が悪いのかわからない場合があります。引数が多いODDFYIELDでは、各日付セルに「●●日(○年○月○日)」とコメントを付けておくと、後から見直したときに混乱しません。
よくあるエラーと対処法
| エラー | 原因 | 対処法 |
|---|---|---|
#NUM! | 日付順違反(maturity > first_coupon > settlement > issue を満たさない) | 4つの日付の前後関係を見直す |
#NUM! | rate < 0、pr ≤ 0、redemption ≤ 0 | 利率と価格は正の値を指定 |
#NUM! | frequency が 1, 2, 4 以外 | 1(年1回)、2(半年)、4(四半期)のいずれかを指定 |
#NUM! | basis が 0 〜 4 の範囲外 | 0〜4 の整数(または省略)を指定 |
#VALUE! | 引数に日付として認識できない文字列が入っている | DATE関数で日付を作るか、セルの書式を「日付」にする |
#VALUE! | 引数に数値として認識できない値が入っている | 数値型かどうかを確認 |
特に多いのが、目論見書の表記をそのままコピーして文字列のまま渡してしまうケースです。日付は =DATE(2008,11,11) のように DATE関数で作るか、セルの書式設定で「日付」型にしておくのが確実です。
ODDFYIELD関数と関連関数の使い分け
債券の価格・利回りを扱う関数はいくつかあります。「初回端数期間があるか」「定期利払いか満期一括か」で関数を選びます。
| 関数 | 用途 | 何を返す |
|---|---|---|
| ODDFYIELD | 初回端数期間あり・定期利払い証券 | 年間利回り |
| ODDFPRICE | 初回端数期間あり・定期利払い証券 | 額面100あたりの価格 |
| YIELD | 通常の定期利払い証券 | 年間利回り |
| PRICE | 通常の定期利払い証券 | 額面100あたりの価格 |
| YIELDMAT | 満期時に利息が一括支払われる証券 | 年間利回り |
| PRICEMAT | 満期時に利息が一括支払われる証券 | 額面100あたりの価格 |
使い分けの判断フロー
- 利息は 満期に一括 で支払われるか? → はい:YIELDMAT / PRICEMAT
- 初回利払い期間が半端 か? → はい:ODDFYIELD / ODDFPRICE
- それ以外(普通の定期利払い) → YIELD / PRICE
ODDFYIELDで価格から利回りを計算したら、逆に利回りから価格を求めるのは ODDFPRICE関数です。価格と利回りはちょうど裏返しの関係になっていて、引数の構成もほぼ同じです。
なお、最終利払いだけが端数期間になる債券には ODDLYIELD関数(Odd Last Yield)を使います。発行直後だけが半端なら ODDFYIELD、満期直前だけが半端なら ODDLYIELD、と覚えておくと整理しやすいです。
まとめ
ExcelのODDFYIELD関数は、初回利払い期間が半端な債券の年間利回りを正確に計算できる関数です。要点を整理すると次のとおりです。
- 構文:
=ODDFYIELD(settlement, maturity, issue, first_coupon, rate, pr, redemption, frequency, [basis]) - 対象: 初回利払い期間が定期周期と異なる「初回端数期間あり」の債券
- 日付順制約:
maturity > first_coupon > settlement > issueを満たすこと - frequency: 1(年1回)/ 2(半年)/ 4(四半期)から選択
- basis: 0〜4。迷ったら 0(省略)でOK、米国国債なら 1(Actual/Actual)
引数が9個と多いので、セルに値を並べてラベルを付けてから関数で参照する方法をおすすめします。日付順違反による #NUM! エラーが最も多いトラブルなので、計算前に必ず4つの日付の前後関係を確認しましょう。
普通の定期利払い債なら YIELD関数、満期一括払いなら YIELDMAT関数、というように、債券のタイプに応じて関数を選び分けるのが基本です。価格から利回りへ変換するのが ODDFYIELD、利回りから価格へ逆算するのが ODDFPRICE、というペア関係も押さえておくと、債券分析がぐっとスムーズになります。
