ExcelのCOUPPCD関数の使い方|受渡日前の最後の利払日
債券を売買するとき、「直前の利払日はいつだったのか」を把握しておく場面がありますよね。経過利息(アキュード・インタレスト)の計算や、クーポン期間の把握に欠かせない情報です。
ExcelのCOUPPCD関数を使えば、受渡日前の最後の利払日の日付を引数4つで一発で取り出せます。COUPNCD関数が「次の利払日はいつか」を返すのに対し、COUPPCD は「直前の利払日はいつか」を返す関数です。
この記事では、COUPPCD関数の構文・実例・COUPNCD や COUPDAYBS との関係・エラー対処まで解説します。
ExcelのCOUPPCD関数とは?
ExcelのCOUPPCD関数(読み方:クーポン・ピーシーディー)は財務関数の一つです。受渡日(settlement)の直前に発生した利払日の日付を返します。
関数名は「COUPon Previous Coupon Date」の略です。「直前のクーポン日」をそのまま意味する関数名です。債券を満期前に売買するとき、「前回はいつ利息が出たか」を日付で確認できます。
COUPPCD関数が必要な場面
- 受渡日前の最後の利払日を売買記録に残したいとき
- 経過利息(COUPDAYBS / COUPDAYS で算出した比率 × クーポン額)を確認したいとき
- COUPNCD(次の利払日)と組み合わせてクーポン期間全体を把握したいとき
- 利払いスケジュール表を過去方向に遡りたいとき
COUPPCD関数で扱える債券
定期的にクーポンを支払う利付債が対象です。
- 利付国債(10年債・5年債など)
- 利付社債
- 地方債
- 半年払い債券・四半期払い債券
割引証券(TB・CP)はクーポンが存在しないため対象外です。満期一括利払い債はYIELDMAT関数やPRICEMAT関数を使ってください。
COUPPCD関数の構文と引数
COUPPCD関数の構文は次のとおりです。
=COUPPCD(settlement, maturity, frequency, [basis])
引数は4つで、basisのみ省略可能です。COUP系関数(COUPNCD・COUPDAYSNC・COUPDAYS・COUPDAYBS)と全く同じ引数構成です。
| 引数 | 必須/省略 | 意味 |
|---|---|---|
| settlement | 必須 | 受渡日(証券の購入が完了する日) |
| maturity | 必須 | 満期日(償還日)。settlementより後の日付 |
| frequency | 必須 | 年間利払回数(1=年1回・2=半年1回・4=四半期1回) |
| basis | 省略可 | 日数計算基準(0〜4の整数。既定は0) |
COUPPCD関数の戻り値について
COUPPCD関数は日付のシリアル値を返します。COUPNCDと同じく、そのままでは大きな整数(例: 46348)のように見えることがあります。セルの書式を「日付」に変更することで、日付表示に切り替えられます。
戻り値は常に settlement より前の日付です。受渡日当日が利払日と一致していても、その日付ではなく「さらに前の利払日」が返ってきます。受渡日当日の利払いは COUPPCD の対象外です。
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 が市場慣行です。COUPPCD と COUPNCD は対称的な関数なので、同じ引数を使えば一貫した結果が得られます。
COUPPCD関数の基本的な使い方
実例で動きを確認しましょう。
例1: 半年払い国債(標準ケース)
10年物国債(半年払い)を受渡日に購入した場面です。
- 受渡日: 2026/5/7
- 満期日: 2030/11/7
- frequency: 2(半年払い)
- basis: 1(Actual/Actual)
=COUPPCD(DATE(2026,5,7), DATE(2030,11,7), 2, 1)
結果は 2026/5/7 ではなく 2026/5/7 の直前の利払日、つまり 2025/11/7 が返ります。満期日が11月7日なので、半年ごとに5月7日・11月7日が利払日になります。受渡日(2026/5/7)の前の利払日は2025/11/7です。
セルの書式を日付に変えると「2025/11/7」として表示されます。
例2: 年1回払い社債
- 受渡日: 2026/5/7
- 満期日: 2029/9/15
- frequency: 1(年1回払い)
- basis: 1
=COUPPCD(DATE(2026,5,7), DATE(2029,9,15), 1, 1)
結果は 2025/9/15 が返ります。年1回払いで毎年9月15日が利払日なので、2026/5/7 の直前の利払日は2025/9/15です。
例3: 四半期払い債券
- 受渡日: 2026/5/7
- 満期日: 2028/3/15
- frequency: 4(四半期払い)
- basis: 1
=COUPPCD(DATE(2026,5,7), DATE(2028,3,15), 4, 1)
結果は 2026/3/15 が返ります。四半期払いで満期日3月15日から3か月ごと(3月・6月・9月・12月)が利払日になります。2026/5/7 の直前の利払日は2026/3/15です。
例4: 受渡日が利払日と一致するケース
受渡日と満期日の月日が同じ(受渡日が利払日に当たる)場合の挙動を確認しましょう。
- 受渡日: 2026/5/7
- 満期日: 2030/5/7
- frequency: 2(半年払い)
- basis: 1
=COUPPCD(DATE(2026,5,7), DATE(2030,5,7), 2, 1)
結果は 2025/11/7 が返ります。受渡日(2026/5/7)が利払日と一致しても、その日付は COUPPCD の戻り値になりません。COUPNCD と同様に「受渡日当日は含まない」ルールが適用されます。
引数をセル参照にする書き方
複数銘柄を扱う場合は、引数をセル参照にしておくと便利です。
| セル | 内容 | 値 |
|---|---|---|
| B2 | 受渡日 | 2026/5/7 |
| B3 | 満期日 | 2030/11/7 |
| B4 | frequency | 2 |
| B5 | basis | 1 |
数式は =COUPPCD(B2, B3, B4, B5) です。受渡日や満期日を変更すれば、直前の利払日も自動で再計算されます。
COUPPCD の戻り値の意味(受渡日当日は含まない)
COUPPCD の戻り値は「受渡日(settlement)の直前の利払日」です。受渡日当日が利払日に一致していても、その日は含まれません。この仕様は COUPNCD(次回利払日)と対称的な設計になっています。
COUPPCD と COUPNCD の対称性
半年払い国債(受渡日2026/5/7・満期日2030/11/7・frequency=2・basis=1)で比較してみましょう。
=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(次回利払日)
直前利払日(2025/11/7)と次回利払日(2026/11/7)の差が1クーポン期間(ここでは約184日)になります。この期間がCOUPDAYS関数の返す「クーポン期間全体の日数」です。
経過利息計算での活用
COUPPCD は経過利息(アキュード・インタレスト)の計算で重要な役割を果たします。
COUPPCD 自体は日付を返すだけですが、「直前の利払日がいつか」という情報は利払いスケジュール表の出発点になります。
COUPPCD・COUPNCD・COUPDAYBS の関係
COUP系関数は「日付」「日数」「回数」のどれを返すかで使い分けます。
戻り値の対比表
| 関数 | 戻り値の種類 | 単位 | 起点 |
|---|---|---|---|
| COUPPCD | 直前の利払日 | 日付 | settlement より前 |
| COUPDAYBS | 直前利払日〜settlement | 日数 | 過去側 |
| COUPDAYS | クーポン期間全体 | 日数 | 期間 |
| COUPDAYSNC | settlement〜次の利払日 | 日数 | 未来側 |
| COUPNCD | 次の利払日 | 日付 | settlement より後 |
| COUPNUM | 残りクーポン回数 | 整数 | 次のクーポン以降 |
COUPPCD と COUPDAYBS の組み合わせ
COUPPCD の日付から COUPDAYBS の日数は自分でも計算できます。
=COUPDAYBS(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 181
=DATE(2026,5,7) - COUPPCD(DATE(2026,5,7), DATE(2030,11,7), 2, 1)
→ 2026/5/7 - 2025/11/7 = 181
両者は一致します。COUPDAYBS を直接使う方が手軽ですが、「直前利払日の日付そのもの」が必要なときは COUPPCD を使ってください。
具体例で確認する
半年払い国債(受渡日2026/5/7・満期日2030/11/7・frequency=2・basis=1)で確認します。
=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(次回利払日)
=COUPDAYBS(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 181(直前利払日から受渡日まで)
=COUPDAYS(DATE(2026,5,7), DATE(2030,11,7), 2, 1) → 365(クーポン期間全体)
「直前の利払日は2025/11/7で、そこから受渡日2026/5/7まで181日経過。クーポン期間全体は365日」と整理できます。
実務での活用例
経過利息の確認
債券の売買では、直前利払日から受渡日までの経過日数に応じた経過利息を計算します。
経過利息 = 額面 × 年率 ÷ frequency × (COUPDAYBS / COUPDAYS)
COUPPCD 自体は日付を返すだけですが、COUPDAYBS の計算根拠として「直前利払日がいつか」を確認するときに役立ちます。
過去の利払いスケジュールの遡り
COUPNCD が未来の利払日を順方向に並べるのに対し、COUPPCD を起点に frequency 月数を引き算すれば、過去の利払日リストを逆算できます。
| 回 | 利払日 | 数式 |
|---|---|---|
| 直前 | 2025/11/7 | =COUPPCD(B2,B3,B4,B5) |
| 2回前 | 2025/5/7 | =COUPPCD(B2,B3,B4,B5) - 184 |
半年払いなら約6か月(実際の日数は basis に依存)ずつ引きます。正確に月単位で遡るには EDATE 関数で 6か月ずつ戻す方法もあります。
利払いスケジュール一覧との組み合わせ
保有中の複数銘柄に対して COUPPCD と COUPNCD を両方出力すると、「直前〜次回の利払い区間」が一目でわかる一覧が作れます。
| 銘柄 | 受渡日 | 満期日 | freq | 直前利払日 | 次回利払日 |
|---|---|---|---|---|---|
| 国債A | 2026/5/7 | 2030/11/7 | 2 | =COUPPCD(B2,C2,D2,1) | =COUPNCD(B2,C2,D2,1) |
| 社債B | 2026/3/15 | 2029/9/15 | 1 | =COUPPCD(B3,C3,D3,3) | =COUPNCD(B3,C3,D3,3) |
この表に「クーポン利率」「額面」を加えれば、経過利息の試算シートに発展できます。
関連する財務関数の全体像
債券タイプごとに使う関数を整理しておくと、迷わずに済みます。
| 債券タイプ | 価格関数 | 利回り関数 | 利払日関数 |
|---|---|---|---|
| 定期利払い債(クーポン付) | PRICE | YIELD | COUPPCD / COUPNCD / COUPNUM |
| 割引証券(TB・CP) | PRICEDISC | YIELDDISC | (該当なし) |
| 満期一括利払い債 | PRICEMAT | YIELDMAT | (該当なし) |
COUPPCD(直前利払日)と COUPNCD(次回利払日)はペアで使うと、クーポン期間の「前後」が一度に把握できます。
よくあるエラーと対処法
#NUM! エラー
| 原因 | 対処法 |
|---|---|
| settlement ≧ maturity | 受渡日が満期日より前になるよう修正 |
| frequency が 1・2・4 以外 | 1、2、4 のいずれかを指定(3 や 12 は不可) |
| basis が 0〜4 以外 | 0〜4の整数を指定 |
| 引数に負の値 | 日付・整数の正の値で指定 |
#VALUE! エラー
settlement や maturity が日付として認識されていないことが原因です。文字列の日付(”2026-05-07″ など)はそのまま渡せません。
誤: =COUPPCD("2026-05-07", "2030-11-07", 2, 1)
正: =COUPPCD(DATE(2026,5,7), DATE(2030,11,7), 2, 1)
DATE関数(年・月・日を整数で指定して日付値を返す関数)で渡すか、日付として整形済みのセル参照を渡してください。
#NAME? エラー
「COUPPCD」のスペルミスが原因です。「COUP_PCD」「COUPREVCD」のような表記は存在しません。Excel の入力候補(IntelliSense)から選ぶと安全です。
戻り値が大きな数字のように見える
COUPPCD は日付のシリアル値を返すため、セルの書式が「標準」になっていると大きな整数(例: 46501)として表示されます。セルを選択して「書式設定 → 日付」に変更してください。
戻り値が想定と違うとき
- frequency の指定ミス(半年払いなのに 1 を入れている等)→ 利払頻度を再確認
- basis の指定が市場慣行と違う → 国債は basis=1、国内社債は basis=3 が標準
- 受渡日の月日と満期日の月日が一致するケースで「1回ずれている」と感じる → 受渡日の利払いは COUPPCD の対象外(例4で解説)
まとめ
ExcelのCOUPPCD関数は、受渡日の直前に発生した利払日の日付を返す財務関数です。本記事のポイントを振り返ります。
- 構文:
=COUPPCD(settlement, maturity, frequency, [basis]) - 戻り値: 直前の利払日(日付のシリアル値)→ セルの書式を「日付」に変更する
- 起点: 受渡日の「前」の直前利払日。受渡日当日は含まない
- 対象: 利付国債・利付社債・地方債など定期的にクーポンを支払う債券
- frequency: 1(年1回)・2(半年)・4(四半期)のみ有効
- basis: basis=1(国債/Actual/Actual)、basis=3(国内社債/Actual/365)が市場慣行
- 対称関数: COUPNCD(次回利払日)とペアで使うとクーポン期間の前後が把握しやすい
同シリーズのCOUPNCD関数・COUPNUM関数・COUPDAYSNC関数・COUPDAYS関数・COUPDAYBS関数・YIELD関数・PRICEMAT関数もあわせて確認してみてください。COUP系関数を体系的に身につければ、債券管理シートの自動化がぐっと楽になりますよ。
