債券の発生利息(経過利息)を計算するとき、「直前の利払日から決済日までの日数」÷「クーポン期間全体の日数」という割り算が必要になります。この分母にあたる「クーポン期間全体の日数」を求めるのがCOUPDAYS関数ですよ。
この記事では、スプレッドシートのCOUPDAYS関数の使い方を、構文・実例・よくあるエラーの対処まで同僚に教える感覚で解説します。COUPDAYBS関数やCOUPDAYSNC関数との使い分けも整理しているので、債券売買の発生利息計算に活用してください。
スプレッドシートのCOUPDAYS関数とは?
スプレッドシートのCOUPDAYS関数は、決済日(受渡日)を含むクーポン期間(利払い期間)全体の日数を返す財務関数です。
関数名のCOUPDAYSは “Coupon Days”(クーポン日数)を略したものです。
債券の発生利息を計算するには、次の式を使います。
発生利息 = 額面 × 年率利率 ÷ 利払い頻度 × (COUPDAYBS ÷ COUPDAYS)
この式の分母が COUPDAYS です。「クーポン期間全体のうち何日分が経過しているか」を表す比率を求めるために使われますよ。
たとえば半年払い(frequency=2)の債券なら、クーポン期間は約180〜184日程度になります。COUPDAYS はこの正確な日数を、日数計算方式(basis)に従って返してくれますよ。
COUPDAYS関数の構文と引数
COUPDAYS関数の構文は次のとおりです。
=COUPDAYS(決済日, 満期日, 頻度, [日数計算方法])
英語表記だと =COUPDAYS(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日(ヨーロッパ方式) |
basis=0 と basis=4 は両方「30日/360日」ですが、月末日の扱いが異なります。basis=0 は米国NASD方式(30日超の月は30日に丸める)、basis=4 はヨーロッパ方式(31日を30日に統一)ですよ。
COUPDAYS関数の基本的な使い方
半年払い債券のクーポン期間日数を求める
年率5%・半年払い(frequency=2)の国債を、2026/4/22に購入する場合のクーポン期間全体の日数を求めます。満期日は2028/10/22とします。
| セル | 項目 | 値 |
|---|---|---|
| B2 | 決済日 | 2026/4/22 |
| B3 | 満期日 | 2028/10/22 |
| B4 | 頻度 | 2 |
=COUPDAYS(B2, B3, B4, 1)
結果は 366 です。直前の利払日2025/10/22から次の利払日2026/10/22までの実日数が366日(閏年を含むため)になりますよ。
DATE関数を使って直接指定することもできます。
=COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 1)
basis の違いによる計算結果の比較
同じ条件でも basis によって結果が変わります。
=COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 0) → 180(30日/360日)
=COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 1) → 366(実日数)
=COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 2) → 366(実日数/360日)
=COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 3) → 365(実日数/365日)
=COUPDAYS(DATE(2026,4,22), DATE(2028,10,22), 2, 4) → 180(30日/360日)
半年払いの場合、basis=0 または basis=4 では固定で180日になります。basis=1 では実際のカレンダー日数が使われるため、閏年や月ごとの日数のばらつきが反映されますよ。
年1回払い債券のクーポン期間日数を求める
年1回払い(frequency=1)の社債で決済日が2026/4/22、満期日が2029/9/15の場合です。
=COUPDAYS(DATE(2026,4,22), DATE(2029,9,15), 1, 1)
結果は 365 です。直前の利払日2025/9/15から次の利払日2026/9/15までの365日が返されます(2026年は閏年ではないため)。
発生利息を計算する
上記の半年払い国債(額面100・年率5%)の発生利息を計算します。
=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))
COUPDAYBS が 183日、COUPDAYS が 366日なので、183÷366 = 0.5。
結果は 約2.50(額面100に対して)です。経過期間がちょうど半分のため、半期クーポンの半分が発生利息になりますよ。
COUPDAYBS・COUPDAYSNCとの使い分け
COUPDAYS関数と同じ「COUP」シリーズの関数を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のみ有効です。たとえば月次払い(12)や隔月払い(6)は指定できませんよ。
#VALUE!エラー
引数に数値や日付以外の文字列が入っている場合に発生します。日付を直接書くときは DATE(2026,4,22) のようにDATE関数を使うと確実ですよ。セル参照で日付を渡す場合も、そのセルが「日付型」になっているかを確認してくださいね。
#NAME?エラー
関数名のスペルミスが原因です。「COUPONDAYS」「COUP_DAYS」などは存在しない関数名です。入力候補から選ぶようにしましょう。
Excelとの互換性
COUPDAYS関数はExcelとGoogleスプレッドシートで同じ計算結果を返します。Excelファイル(.xlsx)をスプレッドシートで開いても関数はそのまま動作しますよ。
スプレッドシートでは引数名が日本語(「決済日」「満期日」「頻度」「日数計算方法」)で表示されます。Excelの英語表記(settlement、maturity、frequency、basis)と見た目は異なりますが、動作に影響はありません。
まとめ
スプレッドシートのCOUPDAYS関数は、決済日を含むクーポン期間全体の日数を返す財務関数です。ポイントをまとめておきます。
- 引数は決済日・満期日・頻度の3つが必須。日数計算方法(basis)は省略可
- 頻度(frequency)は1(年1回)・2(半年払い)・4(四半期払い)のみ有効
- COUPDAYBS + COUPDAYSNC = COUPDAYS の関係になる
- 発生利息の計算式では分母として使う
- basis=0 または 4(30日/360日)では半年払いなら固定で180日、年1回払いなら360日になる
- basis=1(実日数)では閏年や月の日数が反映される
- Excelとの互換性があり、.xlsxファイルをそのまま開いても動作する
COUPDAYS関数単独では発生利息は求められません。COUPDAYBS関数と組み合わせて使うのが基本ですよ。クーポン関連の財務関数はCOUPDAYSNC関数・COUPNCD関数・COUPPCD関数・COUPNUM関数と合わせて使うと、債券の利払いスケジュール管理に役立ちますよ。
