ExcelのCOUPDAYS関数の使い方|利払期間の日数を計算する
債券の経過利息を計算するとき、「このクーポン期間は何日あるんだろう?」と迷うことはありませんか。半年払いなら180日や181日、184日と揺れることがあり、手計算では誤差が出やすいです。
ExcelのCOUPDAYS関数を使えば、受渡日を含むクーポン期間全体の日数を引数4つで一発で取り出せます。経過利息計算の「分母」を担う関数で、ACCRINT関数やPRICE関数の内部でも使われているロジックです。
この記事では、COUPDAYS関数の構文・実例・basis別の戻り値比較・COUPDAYBS/COUPDAYSNCとの恒等式まで同僚に教える感覚で解説します。
ExcelのCOUPDAYS関数とは?
ExcelのCOUPDAYS関数(読み方:クーポン・デイズ)は財務関数の一つです。受渡日を含むクーポン期間(直前の利払日から次の利払日まで)全体の日数を返します。
関数名は「COUPon DAYS」の略です。直訳すると「クーポン期間の日数」となります。定期的に利息(クーポン)を受け取る債券を売買するとき、経過利息の計算に必要な「期間全体の日数」を取り出すために使います。
COUPDAYS関数が必要な場面
債券を満期前に売買するとき、売主には「直前の利払日から売却日までの利息」を受け取る権利があります。これが経過利息(発生利息)です。この経過利息は次の式で計算します。
経過利息 = 額面 × 年利率 ÷ frequency × (COUPDAYBS ÷ COUPDAYS)
COUPDAYBS(直前利払日から受渡日までの日数)が「分子」、COUPDAYS(クーポン期間全体の日数)が「分母」です。COUPDAYSが正確でないと、経過利息がずれてしまいます。
COUPDAYS関数で扱える債券
定期的にクーポンを支払う利付債が対象です。
- 利付国債(10年債・5年債など)
- 利付社債
- 地方債
- 半年払い債券
- 四半期払い債券
割引証券(TB・CP・ゼロクーポン債)や満期一括利払い債には使いません。それぞれYIELDDISC関数やYIELDMAT関数が対応しています。
COUPDAYS関数の構文と引数
COUPDAYS関数の構文は次のとおりです。
=COUPDAYS(settlement, maturity, frequency, [basis])
引数は4つで、basisのみ省略可能です。COUPDAYBS関数とまったく同じ引数構成です。
| 引数 | 必須/省略 | 意味 |
|---|---|---|
| settlement | 必須 | 受渡日(証券の購入が完了する日) |
| maturity | 必須 | 満期日(償還日)。settlementより後の日付 |
| frequency | 必須 | 年間利払回数(1=年1回・2=半年1回・4=四半期1回) |
| basis | 省略可 | 日数計算基準(0〜4の整数。既定は0) |
settlement と maturity の関係
settlementは実際に代金を払って証券を受け取る日です。約定日(取引成立日)とは別物です。maturityはsettlementより後でなければ #NUM! エラーになります。
frequency 引数の選び方
| 値 | 利払頻度 | 主な対象 |
|---|---|---|
| 1 | 年1回払い | 一部の社債・外国債 |
| 2 | 半年払い | 国債・多くの社債 |
| 4 | 四半期払い | 地方債・一部社債 |
3(4か月ごと)や12(毎月払い)は指定できません。#NUM! エラーになります。
basis 引数の選び方
日数の数え方を指定します。市場慣行に合わせて選びましょう。
| 値 | 名称 | 主な対象 |
|---|---|---|
| 0(既定) | US 30/360 (NASD) | 米国社債 |
| 1 | Actual/Actual | 米国国債(実日数計算) |
| 2 | Actual/360 | 米国マネーマーケット |
| 3 | Actual/365 | 日本国内債券 |
| 4 | European 30/360 | 欧州社債 |
国債なら basis=1、日本国内の社債なら basis=3 が市場慣行です。
COUPDAYS関数の基本的な使い方
実例で動きを確認しましょう。
例1: 半年払い国債のクーポン期間日数
10年物国債(半年払い)を満期前に購入する場面です。
- 受渡日: 2026/5/7
- 満期日: 2030/11/7
- frequency: 2(半年払い)
- basis: 1(Actual/Actual)
=COUPDAYS(DATE(2026,5,7), DATE(2030,11,7), 2, 1)
結果は 184 が返ります。直前の利払日2025/11/7から次の利払日2026/11/7までの半年間を Actual/Actual で計算すると184日になります。
例2: 年1回払い社債のクーポン期間日数
- 受渡日: 2026/5/7
- 満期日: 2029/9/15
- frequency: 1(年1回払い)
- basis: 1
=COUPDAYS(DATE(2026,5,7), DATE(2029,9,15), 1, 1)
結果は 365 です。直前の利払日2025/9/15から次の利払日2026/9/15までの1年間が365日です。
例3: 四半期払い債券のクーポン期間日数
- 受渡日: 2026/5/7
- 満期日: 2028/3/15
- frequency: 4(四半期払い)
- basis: 1
=COUPDAYS(DATE(2026,5,7), DATE(2028,3,15), 4, 1)
結果は 92 です。直前の利払日2026/3/15から次の利払日2026/6/15までの四半期が92日です。
引数をセル参照にする書き方
実務ではパラメータをセルに入れてセル参照で計算するのが便利です。
| セル | 内容 | 値 |
|---|---|---|
| B2 | 受渡日 | 2026/5/7 |
| B3 | 満期日 | 2030/11/7 |
| B4 | frequency | 2 |
| B5 | basis | 1 |
数式は =COUPDAYS(B2, B3, B4, B5) です。
basis別 COUPDAYS戻り値比較
basis引数によって日数が変わります。同じ半年払い国債(受渡日2026/5/7・満期日2030/11/7)で比較してみましょう。
| basis | 名称 | COUPDAYS戻り値 | 注記 |
|---|---|---|---|
| 0 | US 30/360 | 180 | 各月を30日固定で計算 |
| 1 | Actual/Actual | 184 | 実日数(2025/11/7〜2026/11/7) |
| 2 | Actual/360 | 184 | 分子は実日数(COUPDAYS自体はActual計算) |
| 3 | Actual/365 | 184 | 実日数(365日固定年換算は別途) |
| 4 | European 30/360 | 180 | 欧州慣行の月末30日固定 |
basis=0と4は月を30日固定で数えるため、必ず180日になります。basis=1/2/3は実日数なので184日です。「半年払いなのに180日?」と思ったときはbasis引数を確認してくださいね。
経過利息の計算式とCOUPDAYSの役割
COUPDAYS関数は経過利息計算の「分母」を提供します。
経過利息 = 額面 × 年利率 ÷ frequency × (COUPDAYBS ÷ COUPDAYS)
COUPDAYSが分母として正確でないと、経過利息がずれます。
経過利息の計算例
額面1,000,000円・年率1.5%・半年払いの国債を、受渡日2026/5/7に購入するケースです。
- 額面: 1,000,000円
- 年率: 1.5%
- frequency: 2
- 受渡日: 2026/5/7
- 満期日: 2030/11/7
- basis: 1
まずCOUPDAYBSとCOUPDAYSを取り出します。
=COUPDAYBS(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 182
=COUPDAYS(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 184
経過利息の計算式に当てはめます。
=1000000 * 0.015 / 2 * (COUPDAYBS(DATE(2026,5,7),DATE(2030,11,7),2,1) / COUPDAYS(DATE(2026,5,7),DATE(2030,11,7),2,1))
結果は 7,432円(= 7,500 × 182/184)です。購入者は債券価格に加えて、この経過利息を売主に支払います。
ACCRINT関数を使えば経過利息額が一発で出ますが、内部ではCOUPDAYBSとCOUPDAYSの同じロジックが動いています。
COUPDAYBS・COUPDAYS・COUPDAYSNCの関係
COUP系3関数の恒等式を数値で確認しましょう。
| 関数 | 返す値 | 用途 |
|---|---|---|
| COUPDAYBS | 直前利払日〜受渡日の日数 | 経過利息の分子 |
| COUPDAYS | クーポン期間全体の日数 | 経過利息の分母 |
| COUPDAYSNC | 受渡日〜次の利払日の日数 | 残り日数 |
三関数の恒等式
COUPDAYBS + COUPDAYSNC = COUPDAYS
「経過した日数」+「残りの日数」=「クーポン期間全体の日数」です。
具体例で検算する
半年払い国債(受渡日2026/5/7・満期日2030/11/7・frequency=2・basis=1)で3関数を確認します。
=COUPDAYBS(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 182
=COUPDAYS(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 184
=COUPDAYSNC(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 2
| 関数 | 戻り値 | 意味 |
|---|---|---|
| COUPDAYBS | 182 | 経過日数(2025/11/7→2026/5/7) |
| COUPDAYS | 184 | クーポン期間全体(2025/11/7→2026/11/7) |
| COUPDAYSNC | 2 | 残り日数(2026/5/7→2026/11/7) |
検算: 182 + 2 = 184 で恒等式が成立します。受渡日が次の利払日のほぼ直前(残り2日)というシナリオです。
直前・次の利払日も知りたいとき
具体的な利払日(日付)が知りたい場合はCOUPPCD関数とCOUPNCD関数を使います。
| 関数 | 返す値 |
|---|---|
| COUPPCD | 直前の利払日(previous coupon date) |
| COUPNCD | 次の利払日(next coupon date) |
=COUPPCD(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 2025/11/7
=COUPNCD(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 2026/11/7
COUPPCD と COUPNCD の差がそのままCOUPDAYSの日数になっています。
ACCRINT関数・PRICE関数との連携
ACCRINT関数との関係
ACCRINT関数は経過利息(金額)を直接返す関数です。内部でCOUPDAYBSとCOUPDAYSのロジックを使っています。
=ACCRINT(issue, first_interest, settlement, rate, par, frequency, [basis], [calc_method])
| 関数 | 返す値 |
|---|---|
| COUPDAYS | クーポン期間の日数(数値) |
| ACCRINT | 経過利息の金額(円) |
ACCRINT を使えば経過利息額が一発で出ますが、発行日や初回利払日まで把握しておく必要があります。COUPDAYBS + COUPDAYS の組み合わせなら受渡日と満期日だけで済む点が利点です。
PRICE関数との関係
PRICE関数は債券のクリーン価格(経過利息抜き)を返します。市場で「ダーティ価格(経過利息込み)」を求めたい場合は次の式を使います。
ダーティ価格 = クリーン価格(PRICE) + 額面 × 年利率 ÷ frequency × (COUPDAYBS ÷ COUPDAYS)
関連する財務関数の全体像
| 債券タイプ | 価格関数 | 利回り関数 | 経過日数関数 |
|---|---|---|---|
| 定期利払い債(クーポン付) | PRICE | YIELD | COUPDAYBS / COUPDAYS |
| 割引証券(TB・CP) | PRICEDISC | YIELDDISC | (該当なし) |
| 満期一括利払い債 | PRICEMAT | YIELDMAT | (該当なし) |
COUPDAYS と COUPDAYBS はセットで覚えておくと、どの場面でも迷わず使えますよ。
よくあるエラーと対処法
#NUM! エラー
| 原因 | 対処法 |
|---|---|
| settlement ≧ maturity | 受渡日が満期日より前になるよう修正 |
| frequency が 1・2・4 以外 | 1、2、4 のいずれかを指定 |
| basis が 0〜4 以外 | 0〜4の整数を指定 |
frequency に3(4か月ごと)や12(毎月払い)を指定するミスが多いです。Excelの仕様上、利払回数は1・2・4のみ対応しています。
#VALUE! エラー
settlementやmaturityが日付として認識されていないことが原因です。
誤: =COUPDAYS("2026-05-07", "2030-11-07", 2, 1)
正: =COUPDAYS(DATE(2026,5,7), DATE(2030,11,7), 2, 1)
セル参照を使う場合も、参照先のセルが「日付型」になっているか確認してください。
#NAME? エラー
関数名のスペルミスが原因です。「CUPDAYS」「COUP_DAYS」は存在しません。Excelの入力候補から選ぶようにしましょう。
結果がbasisによって違いすぎる場合
basis=0または4(30/360)では180日固定、basis=1/2/3(実日数)では184日など実際の月日数になります。市場慣行に合ったbasisを選んでいるか確認してください。
まとめ
ExcelのCOUPDAYS関数は、定期利払い債券の「クーポン期間全体の日数」を返す財務関数です。本記事のポイントを振り返ります。
- 構文:
=COUPDAYS(settlement, maturity, frequency, [basis]) - 対象: 利付国債・利付社債・地方債など定期的にクーポンを支払う債券
- frequency: 1(年1回)・2(半年)・4(四半期)のみ有効
- 恒等式: COUPDAYBS + COUPDAYSNC = COUPDAYS が常に成立
- 経過利息: 額面 × 年利率 ÷ frequency × (COUPDAYBS ÷ COUPDAYS) の「分母」を担う
- basis: basis=0/4は30/360→180日固定、basis=1/2/3は実日数
- 連携先: ACCRINT関数やPRICE関数の内部ロジックでも使われる
同シリーズのCOUPDAYBS関数・YIELD関数・PRICEMAT関数・YIELDDISC関数・RECEIVED関数もあわせて確認してみてください。債券財務関数の体系的な理解が深まりますよ。
