債券を満期前に売買するとき、「直前の利払日から今日まで何日分の利息が発生しているか」を計算するのが発生利息(経過利息)の計算です。この計算に欠かせないのがCOUPDAYBS関数です。スプレッドシートに引数を4つ入れるだけで、直前の利払日から決済日までの日数がすぐに出てきますよ。
この記事では、スプレッドシートのCOUPDAYBS関数の使い方を、構文・実例・よくあるエラーの対処まで同僚に教える感覚で解説します。COUPDAYS関数やCOUPDAYSNC関数との使い分けも整理しているので、債券売買の経過利息計算に活用してください。
スプレッドシートのCOUPDAYBS関数とは?
スプレッドシートのCOUPDAYBS関数は、直前の利払日(クーポン期間の開始日)から決済日(受渡日)までの日数を返す財務関数です。
関数名のCOUPDAYBSは “Coupon Days Before Settlement”(決済日より前のクーポン期間の日数)を略したものです。
債券は通常、発行後に複数回の利払い(クーポン支払い)があります。投資家が満期前に債券を売買する場合、売主は「直前の利払日から売却日までの利息」を受け取る権利があります。これが発生利息(経過利息)で、購入者は債券の価格に加えてこの経過利息を売主に支払います。
COUPDAYBS関数は発生利息の分子にあたる「経過日数」を求めるために使われますよ。
発生利息 = 額面 × 年率利率 ÷ 利払い頻度 × (COUPDAYBS ÷ COUPDAYS)
COUPDAYBS関数の構文と引数
COUPDAYBS関数の構文は次のとおりです。
=COUPDAYBS(決済日, 満期日, 頻度, [日数計算方法])
英語表記だと =COUPDAYBS(settlement, maturity, frequency, [basis]) となります。
| 引数 | 省略 | 説明 |
|---|---|---|
| 決済日(settlement) | 必須 | 証券の受渡日(購入が完了する日)。DATE関数での指定を推奨 |
| 満期日(maturity) | 必須 | 証券の満期日。決済日より後の日付を指定する |
| 頻度(frequency) | 必須 | 年間の利払い回数。1=年1回、2=半年1回(半年払)、4=四半期払 |
| 日数計算方法(basis) | 省略可 | 1年の日数計算方式(下表参照、省略時は0) |
日数計算方法(basis)の設定値
| 値 | 1年の日数計算 |
|---|---|
| 0(省略時) | 30日/360日(米国NASD方式) |
| 1 | 実際の日数/実際の日数 |
| 2 | 実際の日数/360日 |
| 3 | 実際の日数/365日 |
| 4 | 30日/360日(ヨーロッパ方式) |
頻度(frequency)は1・2・4のいずれかしか指定できません。それ以外の値を入れると #NUM! エラーになりますよ。
COUPDAYBS関数の基本的な使い方
半年払い債券の経過日数を求める
年率5%・半年払い(frequency=2)の国債を、2026/4/22に購入する場合の経過日数を求めます。満期日は2028/10/22とします。
| セル | 項目 | 値 |
|---|---|---|
| B2 | 決済日 | 2026/4/22 |
| B3 | 満期日 | 2028/10/22 |
| B4 | 頻度 | 2 |
=COUPDAYBS(B2, B3, B4, 1)
結果は 183 です。直前の利払日である2025/10/22から2026/4/22までの実際の日数が183日であることを示します(basis=1 の実日数計算)。
DATE関数を使って直接指定することもできます。
=COUPDAYBS(DATE(2026,4,22), DATE(2028,10,22), 2, 1)
発生利息を計算する
上記の半年払い国債(額面100・年率5%)の発生利息を計算します。
経過日数(COUPDAYBS) =COUPDAYBS(DATE(2026,4,22), DATE(2028,10,22), 2, 1)
クーポン期間日数(COUPDAYS) =COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 1)
発生利息 = 100 × 0.05 ÷ 2 × (COUPDAYBS ÷ COUPDAYS)
=100 * 0.05 / 2 * (COUPDAYBS(DATE(2026,4,22),DATE(2028,10,22),2,1) / COUPDAYS(DATE(2026,4,22),DATE(2028,10,22),2,1))
結果は 約2.50(額面100に対して)です。これが購入者が売主に支払う経過利息の目安になりますよ。
年1回払い債券の経過日数を求める
年1回払い(frequency=1)の社債で決済日が2026/4/22、満期日が2029/9/15の場合です。
=COUPDAYBS(DATE(2026,4,22), DATE(2029,9,15), 1, 1)
結果は 219 です。直前の利払日2025/9/15から決済日2026/4/22までの実日数219日が経過利息の計算に使われますよ。
COUPDAYS・COUPDAYSNCとの使い分け
COUPDAYBS関数と似た名前の関数が2つあります。3つをまとめて理解すると発生利息計算の全体像がつかめますよ。
| 関数 | 返す値 | 用途 |
|---|---|---|
| COUPDAYBS | 直前の利払日〜決済日の日数 | 発生利息の分子(経過日数) |
| COUPDAYS | 決済日を含むクーポン期間全体の日数 | 発生利息の分母(期間全体の日数) |
| COUPDAYSNC | 決済日〜次の利払日の日数 | 決済日から次の利払いまでの残り日数 |
3つの関係を式で表すと次のようになります。
COUPDAYBS + COUPDAYSNC = COUPDAYS
つまり「経過した日数」+「残りの日数」=「クーポン期間全体の日数」という関係になっていますよ。
具体例で確認する
決済日2026/4/22、満期日2028/10/22、半年払い(frequency=2)、basis=1 の場合:
=COUPDAYBS(DATE(2026,4,22), DATE(2028,10,22), 2, 1) → 183(経過日数)
=COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 1) → 366(期間全体)
=COUPDAYSNC(DATE(2026,4,22), DATE(2028,10,22), 2, 1) → 183(残り日数)
183 + 183 = 366 と一致しますね。この例では決済日がちょうどクーポン期間の中間にあたるため、経過日数と残り日数が同じになっていますよ。
よくあるエラーと対処法
#NUM!エラー
以下のケースで発生します。
| 発生条件 | 対処法 |
|---|---|
| 決済日 ≥ 満期日 | 決済日が満期日より前になるよう修正する |
| 頻度が1・2・4以外 | 1、2、4 のいずれかを指定する |
| basis が 0〜4 以外 | 0, 1, 2, 3, 4 のいずれかを指定する |
特に頻度(frequency)は整数の 1・2・4 のみ有効です。3(4か月ごと)や12(毎月払い)などは使えませんよ。
#VALUE!エラー
引数に数値や日付以外の文字列が入っている場合に発生します。日付を直接書くときは DATE(2026,4,22) のようにDATE関数を使うと確実ですよ。セル参照で日付を渡す場合も、そのセルが「日付型」になっているかを確認してくださいね。
#NAME?エラー
関数名のスペルミスが原因です。「COUPDAYB」「COUP_DAYBS」などは存在しない関数名です。入力候補から選ぶようにしましょう。
Excelとの互換性
COUPDAYBS関数はExcelとGoogleスプレッドシートで同じ計算結果を返します。Excelファイル(.xlsx)をスプレッドシートで開いても関数はそのまま動作しますよ。
スプレッドシートでは引数名が日本語(「決済日」「満期日」「頻度」「日数計算方法」)で表示されます。Excelの英語表記(settlement、maturity、frequency、basis)と見た目は異なりますが、動作に影響はありません。
まとめ
スプレッドシートのCOUPDAYBS関数は、直前の利払日から決済日までの日数を返す財務関数です。ポイントをまとめておきます。
- 引数は決済日・満期日・頻度の3つが必須。日数計算方法(basis)は省略可
- 頻度(frequency)は1(年1回)・2(半年払い)・4(四半期払い)のみ有効
- COUPDAYBS + COUPDAYSNC = COUPDAYS の関係になる
- 発生利息の計算式は 額面 × 年率利率 ÷ 頻度 × (COUPDAYBS ÷ COUPDAYS)
- 日付には DATE関数を使うと文字列とのトラブルを防げる
- Excelとの互換性があり、.xlsxファイルをそのまま開いても動作する
債券の中途売買で経過利息を確認したいときや、ACCRINT関数と組み合わせて発生利息を自動計算する表を作るときにぜひ活用してみてください。クーポン関連の財務関数はCOUPDAYS関数・COUPDAYSNC関数・COUPNCD関数・COUPPCD関数と合わせて使うと、債券の利払いスケジュール管理に役立ちますよ。
