ExcelのCOUPDAYS関数の使い方|利払期間の日数を計算する

スポンサーリンク

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)米国社債
1Actual/Actual米国国債(実日数計算)
2Actual/360米国マネーマーケット
3Actual/365日本国内債券
4European 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
B4frequency2
B5basis1

数式は =COUPDAYS(B2, B3, B4, B5) です。

basis別 COUPDAYS戻り値比較

basis引数によって日数が変わります。同じ半年払い国債(受渡日2026/5/7・満期日2030/11/7)で比較してみましょう。

basis名称COUPDAYS戻り値注記
0US 30/360180各月を30日固定で計算
1Actual/Actual184実日数(2025/11/7〜2026/11/7)
2Actual/360184分子は実日数(COUPDAYS自体はActual計算)
3Actual/365184実日数(365日固定年換算は別途)
4European 30/360180欧州慣行の月末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
関数戻り値意味
COUPDAYBS182経過日数(2025/11/7→2026/5/7)
COUPDAYS184クーポン期間全体(2025/11/7→2026/11/7)
COUPDAYSNC2残り日数(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)

関連する財務関数の全体像

債券タイプ価格関数利回り関数経過日数関数
定期利払い債(クーポン付)PRICEYIELDCOUPDAYBS / COUPDAYS
割引証券(TB・CP)PRICEDISCYIELDDISC(該当なし)
満期一括利払い債PRICEMATYIELDMAT(該当なし)

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関数もあわせて確認してみてください。債券財務関数の体系的な理解が深まりますよ。

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