スプレッドシートのODDLPRICE関数の使い方|不定期最終利払いの価格を計算

スポンサーリンク

「満期前の最後の利払い期間だけ端数になる債券って、いくらで取引すれば適正価格になるの?」——そんな場面で使うのが ODDLPRICE 関数です。

通常の PRICE 関数は、全期間の利払いが均等に揃った債券を前提にしています。満期と直前の利払い日がキリよく揃わない債券では、そのまま使うと正しい価格が出せませんよ。

この記事では、スプレッドシートの ODDLPRICE 関数の使い方を、構文・計算例・よくあるエラーの対処まで同僚に教える感覚で解説します。ODDFPRICE・ODDLYIELD との使い分けも整理しているので、債券分析や財務モデリングの実務にぜひ活用してください。

スプレッドシートの ODDLPRICE 関数とは?

スプレッドシートの ODDLPRICE 関数は、最終利払い期間が不定期(通常と異なる)な債券の、額面100あたりの価格を計算する財務関数です。

関数名の ODDLPRICE は “Odd Last Period Price”(不定期最終期間の価格)を略したもので、利回り(YIELD)から理論価格を求めるときに使います。

不定期最終利払い期間(Odd Last Period)とは

通常の債券は、各利払い期間がほぼ等しい長さです。たとえば半年払いの債券なら、各利払い期間は約6か月ですね。

しかし、既存債券の満期日を途中で変更した場合などでは、直前の利払い日から満期日までの期間が通常のサイクルと揃わないことがあります。

状況説明
短い最終期間(Short Last Period)直前利払日から満期日までが、通常の利払い間隔より短い
長い最終期間(Long Last Period)直前利払日から満期日までが、通常の利払い間隔より長い

この「最終だけ期間が違う債券」を、利回りから理論価格に変換するのが ODDLPRICE です。

ODDLPRICE 関数の構文と引数

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

=ODDLPRICE(決済日, 満期日, 直前利払日, 利率, 利回り, 償還価格, 頻度, [日数計算方法])

英語表記だと =ODDLPRICE(settlement, maturity, last_interest, rate, yld, redemption, frequency, [basis]) となります。

引数省略説明
決済日(settlement)必須債券の受渡日(購入が完了する日)。DATE 関数での指定を推奨
満期日(maturity)必須債券の満期日
直前利払日(last_interest)必須最後から2番目の利払い日(=最終利払い期間の開始日)
利率(rate)必須年間クーポンレート。小数で指定(例: 3.75% → 0.0375)
利回り(yld)必須年間利回り。小数で指定(例: 4.05% → 0.0405)
償還価格(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

ODDFPRICE と似た構成ですが、「発行日」「初回利払日」ではなく「直前利払日」を1つだけ指定する点 が違います。最終期間だけが不定期なので、期間の起点となる直前の利払い日だけわかれば計算できるわけですね。

日数計算方法(basis)の選び方

日数基準主な使用場面
0US/30/360米国社債(デフォルト)
1Actual/Actual米国国債・欧州国債
2Actual/360ユーロ建て短期証券
3Actual/365英国国債
4欧州/30/360欧州社債

省略すると 0(US/30/360)が適用されます。

日付順の制約

ODDLPRICE では、以下の日付順を必ず満たす必要があります。

満期日 > 決済日 > 直前利払日

この順序を守らないと #NUM! エラーになります。日付入力でエラーが出たときは、まずこの順序を疑ってみてください。

ODDLPRICE 関数の基本的な使い方

Microsoft 公式サンプルで計算する

Microsoft 公式ドキュメントで紹介されている、半年払いの社債サンプルです。

セル項目
B2決済日2008/2/7
B3満期日2008/6/15
B4直前利払日2007/10/15
B5利率(クーポン)0.0375(3.75%)
B6利回り0.0405(4.05%)
B7償還価格100
B8頻度(半年払い)2
B9日数計算方法0(US/30/360)
=ODDLPRICE(B2, B3, B4, B5, B6, B7, B8, B9)

結果: 約 99.88(額面100に対して99.88)

利回り 4.05% がクーポン率 3.75% を上回っている(ディスカウント)ので、価格は額面100を少し下回る 99.88 が返ってきますよ。

DATE 関数を使って直接指定する

=ODDLPRICE(
  DATE(2008,2,7),
  DATE(2008,6,15),
  DATE(2007,10,15),
  0.0375,
  0.0405,
  100,
  2,
  0
)

日付を直接入力する場合は、DATE 関数を使うと確実です。文字列で “2008/2/7” と書くと、ロケール設定によっては #VALUE! エラーになることがありますよ。

利回りがクーポン率を下回る場合(プレミアム債)

次は同じ条件で、利回りだけをクーポン率より下げた例です。

=ODDLPRICE(DATE(2008,2,7), DATE(2008,6,15), DATE(2007,10,15), 0.0375, 0.0300, 100, 2, 0)

結果: 約 100.28(額面100に対して100.28)

利回り 3.00% がクーポン率 3.75% を下回る(プレミアム債)なので、価格は額面100を上回る 100.28 が返ってきます。利回りと価格が逆方向に動く関係がわかりやすいサンプルですね。

関連関数との使い分け

ODDLPRICE と組み合わせて使う関連関数を整理します。

ODDF / ODDL 系 4 関数

関数対象期間返す値主な用途
ODDLPRICE不定期最終利払い価格最終期間が不定期な債券の価格を求める
ODDLYIELD不定期最終利払い利回り最終期間が不定期な債券の利回りを求める
ODDFPRICE不定期初回利払い価格初回期間が不定期な債券の価格を求める
ODDFYIELD不定期初回利払い利回り初回期間が不定期な債券の利回りを求める

「F=First(初回)、L=Last(最終)、PRICE=価格、YIELD=利回り」と覚えると整理しやすいですよ。

初回期間が不定期な債券の価格・利回り計算については、スプレッドシートのODDFPRICE関数の使い方スプレッドシートのODDFYIELD関数の使い方 も合わせて参考にしてください。

ODDLPRICE と ODDLYIELD の関係

ODDLPRICE と ODDLYIELD は逆関数ペアの関係です。

入力出力関数
利回り →価格ODDLPRICE
価格 →利回りODDLYIELD

同じ債券条件で ODDLPRICE の結果を ODDLYIELD に入れ直すと、元の利回りに戻ります。計算内部では同じ現在価値モデルを使い、ODDLYIELD はニュートン法で利回りを反復的に逆算しています。

通常の PRICE 関数との違い

状況使う関数
全期間が均等な利払い期間の債券PRICE 関数
初回利払い期間だけが不定期な債券ODDFPRICE 関数
最終利払い期間だけが不定期な債券ODDLPRICE 関数

債券の価格を出すときは、「満期日=直前利払日+通常間隔」で揃っているかを最初にチェックしましょう。揃っていなければ PRICE ではなく ODDLPRICE が正解です。

よくあるエラーと対処法

#NUM! エラー

最も多いエラーです。以下のケースで発生します。

発生条件対処法
決済日 ≥ 満期日決済日が満期日より前になるよう修正する
直前利払日 ≥ 決済日直前利払日は決済日より前に設定する
利率 < 0クーポンレートは 0 以上の小数で指定する
利回り < 0利回りは 0 以上の小数で指定する
償還価格 ≤ 0償還価格は 0 より大きい値で指定する
頻度が 1・2・4 以外年間利払い回数は 1・2・4 のいずれかを指定する
日数計算方法が 0〜4 以外basis は 0〜4 の整数を指定する

#VALUE! エラー

引数に日付・数値として解釈できない値が入っている場合に発生します。日付を直接入力するときは DATE(2008,2,7) のように DATE 関数を使うと確実ですよ。文字列の “2008/2/7” はロケール依存で失敗することがあります。

#NAME? エラー

関数名のスペルミスが原因です。ODDLPRICODD_L_PRICEODDL PRICE などは存在しない関数名です。正しくは ODDLPRICE(アンダースコアやスペースなし)ですよ。

Excel との互換性

ODDLPRICE 関数は、Excel 2007 以降・Google スプレッドシート・LibreOffice Calc で同じ計算結果を返します。Excel ファイル(.xlsx)をスプレッドシートで開いてもそのまま動作しますよ。

内部計算は日数基準(basis)に従って準期間(quasi-period)を割り出し、各キャッシュフローを現在価値に割り引く方式です。プラットフォームごとの微小な丸め差が出るケースがあるので、厳密な一致が必要な場合は basis を明示して結果を確認してください。

まとめ

スプレッドシートの ODDLPRICE 関数は、最終利払い期間が通常と異なる(不定期な)債券の価格を計算する財務関数です。ポイントをまとめておきます。

  • 引数は 決済日・満期日・直前利払日・利率・利回り・償還価格・頻度 の7つ(日数計算方法は省略可)
  • 年間利回り(小数)から額面100あたりの理論価格 を返す関数で、ODDLYIELD の逆関数ペア
  • 既存債券の満期日変更などで直前利払日と満期日の間隔が通常と異なる債券の価格計算に使う
  • 頻度は 1(年1回)・2(半年払い)・4(四半期払い) のみ指定可能
  • 日付順制約 満期日 > 決済日 > 直前利払日 を守らないと #NUM! エラー
  • 初回期間が不定期な債券には ODDFPRICE 関数 を使う
  • Excel 2007 以降・LibreOffice Calc との互換性があり、.xlsx ファイルをそのまま開いても動作する

債券分析ツールや財務モデルの中で、満期直前の期間調整が必要な債券の価格評価に ODDLPRICE を活用してください。

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