YIELD関数で債券の利回り計算をしていると、こんな場面に出くわしませんか?
「最初の利払日までの期間が端数になっている社債がある。でも通常の関数では正確に出せない……」
そんなときに使うのが、ExcelのODDFYIELD関数です。最初の利払期間が端数の証券の利回りを求める財務関数です。PRICE関数やYIELD関数といった通常の財務関数では対応できないケースをカバーしますよ。
ペア関数のODDFPRICE関数(価格を求める関数)と組み合わせると、価格と利回りの双方向チェックもできますよ。
この記事では、ODDFYIELD関数の構文・引数・日付順制約・計算例・エラー対処まで、実務で使える知識をまとめて解説します。
ExcelのODDFYIELD関数とは?
ODDFYIELD関数の基本概念と関数名の意味
ExcelのODDFYIELD関数は、最初の利払期間が端数の証券の利回りを求める財務関数です。
関数名は ODD + F + YIELD の組み合わせです。
- ODD: 不規則(通常と異なる)
- F: 最初(First)
- YIELD: 利回り
「最初のクーポン期間が不規則な証券の利回り」という意味になります。
通常の債券では、発行から最初の利払日まで1クーポン期間ちょうどです。でも実際の新発債は月中発行が多く、最初の利払期間が端数になりがちですよ。
端数第1期間(Odd First Period)の概念
端数第1期間(Odd First Period)とは、発行日から最初の利払日までの期間が通常と異なる状態のことです。
半年払いの債券なら、通常1クーポン期間は約6ヶ月です。でも発行日から最初の利払日まで約2ヶ月しかない場合——その短い期間が「端数第1期間」になります。
このような端数期間を正確に計算するために、ODDFYIELD関数が必要です。
ODDFPRICE関数との関係
ODDFYIELD関数とODDFPRICE関数(価格を求める関数)はペアの関係です。
| 関数 | 入力 | 出力 |
|---|---|---|
| ODDFPRICE | 利回り | 価格 |
| ODDFYIELD | 価格 | 利回り |
ODDFYIELD は ODDFPRICE の逆関数です。双方向で計算して整合性を確認する「往復チェック」が実務で役立ちますよ。
端数第1期間が発生するケース
短端数(Short First Period)とは
短端数は、端数第1期間が通常の1クーポン期間より短いケースです。
- 半年払いの通常期間: 約180日
- 月中発行での第1期間: 約45日
この差が「短端数」(Short First Period)です。実務では新発社債の月中発行で頻繁に起きます。
長端数(Long First Period)とは
長端数は、端数第1期間が通常の1クーポン期間より長いケースです。
1クーポン期間を超える第1期間が生じるため、初回クーポンが通常より多くなります。短端数より発生頻度は少ないですが、計算式はより複雑になります。
実務での発生場面(新発債・中途購入債)
端数第1期間が発生する代表的なケースは2つです。
① 新発社債(最も多い): 企業が月中に発行条件を決めることが多いです。クーポン支払日が特定日(例: 毎年3月20日・9月20日)に固定されていると、最初の利払期間が端数になります。
② 外国債券: 米国・欧州の債券は end-of-month convention(月末日を基準とする利払日慣行)が適用されます。basis(日数計算基準)パラメータで切り替えれば計算できますよ。
ODDFYIELD関数の構文と引数
構文の確認
=ODDFYIELD(settlement, maturity, issue, first_coupon, rate, pr, redemption, frequency, [basis])
引数は全部で9つです(basis のみ省略可能)。
引数の詳細一覧(全9引数)
| 引数 | 必須 | 説明 | 制約 |
|---|---|---|---|
| settlement | ○ | 受渡日(決済日。証券購入が完了する日) | issue の後 |
| maturity | ○ | 満期日(償還日) | first_coupon の後 |
| issue | ○ | 発行日(最も早い日付) | 最も早い日付 |
| first_coupon | ○ | 最初の利払日(初回クーポン支払日) | settlement の後 |
| rate | ○ | 年間クーポン利率(小数。例: 5%→0.05) | 0以上 |
| pr | ○ | 証券の価格(額面100あたりのクリーン価格) | 0より大 |
| redemption | ○ | 額面100あたりの償還価格(通常100) | 0より大 |
| frequency | ○ | 年間利払回数(1=年1回/2=半年払い/4=四半期払い) | 1/2/4のみ |
| basis | 省略可 | 日数計算基準(0〜4、省略時は0) | 0〜4 |
pr は額面100あたりのクリーン価格(経過利子を含まない価格)です。市場価格が101円なら 101、95円なら 95 を入力します。
first_coupon(初回利払日)の特定にはCOUPNCD関数が役立ちます。発行日周辺の利払日を調べるならCOUPPCD関数も参考にしてください。
日付順制約の時系列図(issue→settlement→first_coupon→maturity)
ODDFYIELD関数で最も重要なのが日付の順序制約です。この順序を守らないと #NUM! エラーになります。
issue < settlement < first_coupon < maturity
(発行日) (受渡日) (初回利払日) (満期日)
時系列で見るとこうなります:
発行日 受渡日 初回利払日 満期日
│ │ │ │
▼ ▼ ▼ ▼
──────────────────────────────────────────────────→ 時間
issue settlement first_coupon maturity
│← A →│
│←── 端数第1期間(DFC)──→│
│←── DSC ──→│
各変数の意味は以下の通りです。
- A: 発行日から受渡日までの日数(経過利子の計算に使用)
- DFC: 発行日から初回利払日までの日数(端数第1期間の長さ)
- DSC: 受渡日から初回利払日までの日数
なお、ODDFPRICE関数では issue ≦ settlement(等号を許可)です。でも ODDFYIELD では全て厳密な不等号(等号は不可)なので、この微妙な違いには注意してくださいね。
basis(基準)の設定値一覧
| basis | 日数計算方式 | 主な用途 |
|---|---|---|
| 0(省略時) | 30日/360日(NASD方式) | 米国社債 |
| 1 | 実際の日数/実際の日数 | 米国財務省証券等 |
| 2 | 実際の日数/360日 | 欧州系債券 |
| 3 | 実際の日数/365日 | 英国・日本の公社債 |
| 4 | 30日/360日(欧州方式) | 欧州社債 |
日本の公社債では ACT/365(basis=3)または 30/360(basis=0)が多く使われます。この記事では Excel のデフォルト(basis=0)を基本として解説します。
ODDFYIELD関数の使用例
計算例:短端数の社債利回りを求める
Microsoft公式のサンプルデータで計算してみます。
| パラメータ | 値 |
|---|---|
| settlement(受渡日) | 2008年11月11日 |
| maturity(満期日) | 2021年3月1日 |
| issue(発行日) | 2008年10月15日 |
| first_coupon(初回利払日) | 2009年3月1日 |
| rate(クーポン利率) | 5.75%(0.0575) |
| pr(市場価格、額面100あたり) | 84.50 |
| redemption(償還価格) | 100 |
| frequency(利払頻度) | 2(半年払い) |
| basis(日数計算基準) | 0(30/360) |
発行日(2008-10-15)から初回利払日(2009-03-01)まで約4.5ヶ月です。半年払いの通常期間(約6ヶ月)より短いので、これは短端数のケースです。
ステップごとの入力解説
数式はこうなります:
=ODDFYIELD(DATE(2008,11,11), DATE(2021,3,1), DATE(2008,10,15), DATE(2009,3,1), 0.0575, 84.50, 100, 2, 0)
結果: 7.72%(正確には 7.7246%)
日付は必ず DATE(年,月,日) 形式で入力してください。テキスト文字列で直接入力するとエラーの原因になります。
Excelシートでの設定確認
セル参照で組み立てると管理しやすいですよ。
| セル | 引数 | 入力内容 | 表示値 |
|---|---|---|---|
| B2 | settlement | =DATE(2008,11,11) | 2008/11/11 |
| B3 | maturity | =DATE(2021,3,1) | 2021/3/1 |
| B4 | issue | =DATE(2008,10,15) | 2008/10/15 |
| B5 | first_coupon | =DATE(2009,3,1) | 2009/3/1 |
| B6 | rate | 0.0575 | 5.75% |
| B7 | pr | 84.50 | 84.50 |
| B8 | redemption | 100 | 100 |
| B9 | frequency | 2 | 2 |
| B10 | basis | 0 | 0 |
| B12 | — | =ODDFYIELD(B2,B3,B4,B5,B6,B7,B8,B9,B10) | 7.72% |
日本企業社債の実務例(新発社債・短端数):
月中発行の新発5年社債で、端数第1期間が約4ヶ月生じるケースです。
=ODDFYIELD(DATE(2024,2,20), DATE(2029,6,20), DATE(2024,2,15), DATE(2024,6,20), 0.025, 99.00, 100, 2, 0)
→ 結果: 2.70%(正確には 2.7029%)
| 日付 | 値 |
|---|---|
| 発行日 | 2024年2月15日(月中発行) |
| 受渡日 | 2024年2月20日(T+3決済) |
| 初回利払日 | 2024年6月20日 |
| 満期日 | 2029年6月20日(5年債) |
市場価格99円・クーポン2.5%なので、利回りは2.7029%になります。価格が額面(100)を下回っているため、クーポン率より高い利回りになりますよね。
また、市場価格が100円(額面通り)のときの利回りは2.5003%で、ほぼ額面利率(2.5%)と一致します。新発債の特性がよく表れていますよ。
ODDFPRICE関数との双方向チェック
ODDFPRICE→ODDFYIELD逆算で検証する手順
ODDFPRICE関数(価格を求める関数)で価格を求め、その価格を ODDFYIELD に入力します。元の利回りに戻れば計算が正確と確認できますよ。
Step 1: 利回りから価格を求める(ODDFPRICE)
=ODDFPRICE(DATE(2008,11,11), DATE(2021,3,1), DATE(2008,10,15), DATE(2009,3,1), 0.0575, 0.0772, 100, 2, 0)
→ 価格: 84.53
Step 2: 価格から利回りに逆算する(ODDFYIELD)
=ODDFYIELD(DATE(2008,11,11), DATE(2021,3,1), DATE(2008,10,15), DATE(2009,3,1), 0.0575, 84.53, 100, 2, 0)
→ 利回り: 7.72%(往復一致)
往復誤差は 0.0000bp(完全一致) です。このように往復で数値が一致することを確認すると、計算の信頼性が高まります。
誤差の許容範囲と注意点
ODDFYIELD は反復計算(ニュートン法)で利回りを収束させます。ODDFPRICE で得た価格をそのまま入力すれば、ほぼ誤差ゼロで元の利回りに戻ります。
ただし、表示桁数で四捨五入した価格を入力すると、わずかにずれる場合があります。検証時は価格をできるだけ多くの桁数で保持してください。
YIELD関数との使い分け
通常債券 vs 端数期間債券の比較表
| 項目 | YIELD関数 | ODDFYIELD関数 |
|---|---|---|
| 対象 | 通常の利付債(定期的な利払い) | 最初の利払期間が端数の証券 |
| 必要な引数 | 7つ | 9つ(発行日・初回利払日が追加) |
| 端数第1期間への対応 | 対応不可(不正確な結果になる) | 短端数・長端数ともに対応 |
| 使える場面 | 既発債の通常取引 | 新発債・不規則スケジュール債 |
どちらを使うか判断するフローチャート
判断のポイントは発行日から最初の利払日までの期間です。
発行日から最初の利払日まで、1クーポン期間ちょうどか?
├─ YES → YIELD関数(通常の固定利付債)
└─ NO → ODDFYIELD関数(端数第1期間あり)
半年払いの債券なら、発行日から初回利払日まで約6ヶ月ちょうどでなければ ODDFYIELD を使います。新発債は多くの場合 ODDFYIELD が必要になりますよ。
よくあるエラーと対処法
#NUM!エラーの原因と解決手順
#NUM! エラーは、引数の値が計算できない状態のときに発生します。発生条件は6つあります。
| # | 発生条件 | 対処法 |
|---|---|---|
| 1 | issue ≥ settlement(発行日が受渡日と同日または後) | 発行日 < 受渡日 になるよう修正 |
| 2 | settlement ≥ first_coupon(受渡日が初回利払日と同日または後) | 受渡日 < 初回利払日 になるよう修正 |
| 3 | first_coupon ≥ maturity(初回利払日が満期日と同日または後) | 初回利払日 < 満期日 になるよう修正 |
| 4 | rate < 0(クーポン利率がマイナス) | 0以上の値に変更(0は可) |
| 5 | pr ≤ 0(価格が0以下) | 正の価格を入力 |
| 6 | basis が 0〜4 以外、または frequency が 1/2/4 以外 | 有効な値に修正 |
実務でよく起きるミス3パターン:
❌ パターン1: issue と settlement の順序ミス
発行日が受渡日の後になっている → #NUM!
❌ パターン2: first_coupon が settlement 以前
受渡日: 2024-06-01, 初回利払日: 2024-03-15(過去) → #NUM!
❌ パターン3: 第3引数(issue)と第4引数(first_coupon)の入れ替え
引数の順序を誤って入力 → 日付順序が崩れ #NUM!
最も多い原因は「4つの日付の順序ミス」です。必ず issue < settlement < first_coupon < maturity を確認してください。
#VALUE!エラーの原因と解決手順
#VALUE! エラーは、引数のデータ型が不正なときに発生します。
| 原因 | 具体例 | 対処法 |
|---|---|---|
| 日付引数が文字列 | "2024/3/1" をテキストで入力 | DATE(2024,3,1) に変更 |
| 利率が文字列 | "5%" をテキストで入力 | 0.05 に変更 |
日付入力ミスによるエラーの防止策
日付はすべて DATE(年,月,日) 関数で入力するのが最も安全です。セル参照でも問題ありません。ただし、セルの書式が「文字列」になっていると日付として認識されないので注意してください。
まとめ
ExcelのODDFYIELD関数は、最初の利払期間が端数の証券の利回りを求める財務関数です。
新発社債や外国債券など、端数利払期間が生じる場面で活用できます。ペア関数のODDFPRICE関数(価格を求める関数)と組み合わせると、価格と利回りの往復チェックで数値の整合性を確認できますよ。
この記事のまとめ:
- 引数は9つ(
basisのみ省略可能) - 日付の順序制約
issue < settlement < first_coupon < maturityが最重要 #NUM!の原因は日付順序ミスが最も多い- ODDFPRICE関数→ODDFYIELD の往復チェックで整合性を確認できる
関連関数リンク集
| 関数 | リンク | 用途 |
|---|---|---|
| ODDFPRICE(ペア関数) | ODDFPRICE関数の使い方 | 端数第1期間の証券の価格を求める |
| YIELD | YIELD関数の使い方 | 通常の固定利付債の利回りを求める |
| PRICE | PRICE関数の使い方 | 通常の固定利付債の価格を求める |
| COUPNCD | COUPNCD関数の使い方 | 受渡日後の最初の利払日を求める |
| COUPPCD | COUPPCD関数の使い方 | 受渡日前の最後の利払日を求める |
Googleスプレッドシートで使う場合: Google スプレッドシートには ODDFYIELD 関数が存在しません(2026年5月時点)。スプレッドシートのODDFYIELD関数の使い方で代替方法を確認してください。
