満期にまとめて利息を払う証券(満期利払い証券)の価格を、ExcelでサクッとPRICEMAT関数で計算してみたいと思ったことはありませんか。短期社債や利付一括償還型の地方債は、普通の社債とは利息の支払い方が違うため、PRICE関数では正しく評価できません。そこで活躍するのがExcelのPRICEMAT関数です。
PRICEMAT関数を使えば、発行日・受渡日・満期日と利率・利回りを与えるだけで、額面100あたりの理論価格が一発で求まります。今回はPRICEMAT関数の使い方を、引数の意味から実務サンプル、PRICE関数・PRICEDISC関数との使い分けまで丁寧に解説します。
ExcelのPRICEMAT関数とは
PRICEMAT関数は、満期に元本と利息をまとめて支払う証券の、額面100単位あたりの価格を返すExcelの財務関数です。「PRICE」+「Maturity(満期)」が名前の由来で、英語の「Price at Maturity payment」から来ています。
対象となるのは、利息を毎月や半年ごとに払うのではなく、満期日にまとめて元本と利息を一括払いするタイプの証券です。たとえば次のようなものが該当します。
- 短期社債(満期一括償還型)
- 利付一括償還型の地方債
- 一部の仕組債やプライベート債
普通の社債のように半年ごとや年1回クーポンを払う証券にはPRICE関数、クーポンがなく額面割れで発行される割引債にはPRICEDISC関数を使います。「満期に一括」タイプはPRICEMAT関数の出番ですよ。
PRICEMAT関数の構文と引数
PRICEMAT関数の基本構文は次の通りです。
=PRICEMAT(settlement, maturity, issue, rate, yld, [basis])
引数の意味を整理すると、次の表の通りです。
| 引数 | 必須 | 意味 |
|---|---|---|
| settlement | 必須 | 受渡日(証券を購入する日) |
| maturity | 必須 | 満期日(償還日) |
| issue | 必須 | 発行日 |
| rate | 必須 | 額面利率(年率・小数) |
| yld | 必須 | 年利回り(小数) |
| basis | 省略可 | 日数計算方法(0〜4) |
時系列のイメージ
3つの日付(発行日・受渡日・満期日)の関係は、必ず次の順序です。
発行日(issue) < 受渡日(settlement) < 満期日(maturity)
この順序を守らないと#NUM!エラーになります。受渡日は実際にお金と証券を交換する日で、約定日(取引が成立した日)とは別物なので注意してください。
rate と yld の違い
- rate(額面利率): 証券に印字された利率。発行体が満期に支払う利息の計算に使う
- yld(利回り): 投資家が手にする実質的な年率リターン
額面利率と利回りが一致するときだけ、価格はぴったり100になります。市場金利が上昇して利回りが額面利率を上回ると、価格は100を下回ります(割安発行)。
basis引数の選び方
basis引数は日数の数え方を指定します。実務では次のように選んでください。
| 値 | 名称 | 主な用途 |
|---|---|---|
| 0(既定) | US (NASD) 30/360 | 米国社債のデフォルト |
| 1 | Actual/Actual | 米国財務省証券 |
| 2 | Actual/360 | 米国短期金融商品 |
| 3 | Actual/365 | 日本国内債券 |
| 4 | European 30/360 | 欧州社債 |
日本国内の利付一括償還債なら原則 basis=3、米国の短期社債なら basis=2 を使うのが定石です。発行体が公表する「利息計算方法」に従って選んでくださいね。
PRICEMAT関数の基本的な使い方
まずはシンプルな例で計算してみましょう。
例: 1年満期・額面利率3%・利回り2%
- 発行日 2025/1/1、受渡日 2025/1/1(発行日と同日)
- 満期日 2026/1/1
- 額面利率 3%、利回り 2%
- basis = 0(30/360)
セルに次のように入力します。
=PRICEMAT(DATE(2025,1,1), DATE(2026,1,1), DATE(2025,1,1), 0.03, 0.02, 0)
結果は 100.9804 となります。
直感的に検証してみましょう。1年後に元本100+利息3=合計103を受け取る権利があり、これを利回り2%で割り引くと 103 ÷ 1.02 = 100.98 になります。PRICEMAT関数の計算結果と一致しますよね。
引数を日付セル参照にする書き方
実務では日付をセルに入力しておき、PRICEMATでセル参照する形が便利です。
| セル | 内容 | 値 |
|---|---|---|
| B2 | 受渡日 | 2025/1/1 |
| B3 | 満期日 | 2026/1/1 |
| B4 | 発行日 | 2025/1/1 |
| B5 | 額面利率 | 3% |
| B6 | 利回り | 2% |
| B7 | basis | 0 |
数式: =PRICEMAT(B2, B3, B4, B5, B6, B7)
これで条件を変えて感度分析をしたいときも、入力欄の数値を書き換えるだけで価格が更新されます。
実務での使い方|短期社債を中途で買うケース
実務でPRICEMAT関数を使うのは、既に発行済みの満期一括利払い債券を中途で購入するシーンが多いです。
サンプルケース
- 発行日: 2025/2/15
- 受渡日: 2025/5/30(発行から約3ヶ月半経過)
- 満期日: 2026/2/15
- 額面利率: 4%(満期に一括支払い)
- 利回り: 3.5%
- basis = 0(30/360)
セルに入力する数式は次の通りです。
=PRICEMAT(DATE(2025,5,30), DATE(2026,2,15), DATE(2025,2,15), 0.04, 0.035, 0)
結果は 100.3174(クリーン価格)となります。
結果の読み方
利率4%・利回り3.5%なので、利率が利回りより高い分だけ価格はわずかに100を上回ります。発行から3ヶ月半経過しているため、その分の経過利子(後述のACCRINTM関数で計算)を上乗せして取引するのが実務の流れです。
経過利子も計算してダーティ価格を求める
PRICEMAT関数の戻り値はクリーン価格(経過利子を含まない理論価格)です。実際の取引価格(ダーティ価格)を求めるには、ACCRINTM関数で経過利子を計算して足し合わせます。
=ACCRINTM(DATE(2025,2,15), DATE(2025,5,30), 0.04, 100, 0)
結果は 1.1667 となり、これが額面100あたりの経過利子です。
ダーティ価格 = クリーン価格 + 経過利子 = 100.3174 + 1.1667 = 101.4841
つまり、額面1億円の証券を中途で購入する場合、実際に支払う金額は約1億148万円という計算になります。
PRICE・PRICEDISCとの使い分け
満期一括利払いではない普通の社債や割引債には、別の関数を使います。3関数の使い分けを比較表で整理しましょう。
| 関数 | 対象証券 | 利息の支払い方 | 主な引数の違い |
|---|---|---|---|
| PRICE | 定期利払い債券(普通の社債・国債) | クーポンを定期的に支払う | frequency(年1/2/4回)が必要 |
| PRICEDISC | 割引証券(CP・割引短期国債) | 利息なし、額面割れで発行 | discount(割引率)が必要 |
| PRICEMAT | 満期一括利払い証券(短期社債・利付一括償還債) | 満期にまとめて支払う | issue(発行日)と rate, yld が必要 |
関数を選ぶ判断フロー
- クーポン(利息)はあるか?
- ない → PRICEDISC関数
- ある → 次の質問へ
- 利息は定期的に支払われるか?
- 半年や年1回など定期的 → PRICE関数
- 満期に一括 → PRICEMAT関数
このフローで迷うことはなくなりますよね。
よくある混同ポイント
- 「短期だから割引債」と決めつけない。短期でも満期一括利息支払いの証券は存在します
- 「利息あり=PRICE」も違う。利息の支払い回数(フリークエンシー)が定期的かどうかで判断します
ACCRINTM・YIELDMATと組み合わせる
PRICEMAT関数は、満期利払い証券シリーズの他関数と組み合わせると一段と強力です。
YIELDMAT関数で逆算する
価格から利回りを逆算したい場合は YIELDMAT関数を使います。価格と利回りはコインの裏表の関係なので、PRICEMATとYIELDMATは双方向で使えます。
構文: =YIELDMAT(settlement, maturity, issue, rate, pr, [basis])
たとえば「市場価格が100.32の短期社債、満期2026/2/15、発行2025/2/15、決済2025/5/30、利率4%」なら次の通りです。
=YIELDMAT(DATE(2025,5,30), DATE(2026,2/15), DATE(2025,2,15), 0.04, 100.32, 0)
結果は約 3.4965% で、PRICEMATで使った利回り3.5%とほぼ一致します(端数誤差)。
ACCRINTM関数で経過利子を求める
前述のACCRINTM関数は、発行日から指定日までの累計経過利子を計算します。PRICEMATとセットで使うのが定番です。
構文: =ACCRINTM(issue, settlement, rate, par, [basis])
PRICEMATが「クリーン価格」、ACCRINTMが「経過利子」、両方を足したものが「ダーティ価格(実際の取引額)」という関係を覚えておきましょう。
内部計算式の理解
PRICEMATの内部計算式は次のようになっています。
100 + (DIM/B × rate × 100)
PRICEMAT = ─────────────────────────── − (A/B × rate × 100)
1 + (DSM/B × yld)
- B: 1年あたりの基準日数(basisで決まる)
- DIM: 発行日から満期日までの日数
- A: 発行日から決済日までの日数
- DSM: 決済日から満期日までの日数
第1項は「満期に受け取る元本+全期間利息(経過利子込み)」を残存期間で割引した現在価値。第2項は経過利子を差し引いてクリーン価格化する処理です。
よくあるエラーと対処法
PRICEMAT関数でよく遭遇するエラーと対処法をまとめます。
#NUM! エラー
引数の値が不適切なときに出ます。次のいずれかを確認してください。
settlement >= maturity(受渡日が満期日以降)→ 日付の前後関係を見直すissue >= settlement(発行日が受渡日以降)→ 発行日が一番過去になっているか確認rate < 0(額面利率がマイナス)→ 0以上の値にするyld < 0(利回りがマイナス)→ 0以上の値にするbasis < 0またはbasis > 4→ 0〜4の範囲に修正
#VALUE! エラー
日付引数が日付として認識できない、または数値引数が数値として読めないときに出ます。
- 日付は必ずDATE関数(年月日から日付値を作る関数)で指定する
- 文字列で「2025/5/30」と入力すると環境によってエラーになる場合があるので、シリアル値で渡すのが安全
計算結果が異常になる場合
rate や yld を「3」のように整数で入力すると、Excelは「300%」と解釈してしまいます。
- 誤:
=PRICEMAT(...,3,2,0)→ 利率300%・利回り200%扱い - 正:
=PRICEMAT(...,0.03,0.02,0)または=PRICEMAT(...,3%,2%,0)
入力ミスを防ぐには、セル書式を「パーセンテージ」にして3%や2%と直接入力するのがおすすめです。
basis引数の混在に注意
社内システムでbasis=0、市場の慣行ではbasis=3のように混在すると、価格の照合で誤差が出ます。発行体の公表情報や社内基準に合わせて統一しましょう。
まとめ
ExcelのPRICEMAT関数は、満期に元本と利息を一括で支払う証券の額面100あたり価格を計算する財務関数です。本記事のポイントを振り返ります。
- 対象: 短期社債・利付一括償還型地方債など「満期一括利息支払い」の証券
- 構文:
=PRICEMAT(settlement, maturity, issue, rate, yld, [basis]) - 時系列: 発行日 < 受渡日 < 満期日 の順序を必ず守る
- 戻り値: クリーン価格(額面100あたり)。実際の取引額はACCRINTMの経過利子を足したダーティ価格
- 使い分け: 定期利払い→PRICE、割引債→PRICEDISC、満期一括利払い→PRICEMAT
- basis: 米国短期社債=2、日本国内債=3 が実務の定石
- エラー対処:
#NUM!は日付順序や引数範囲、#VALUE!は日付・数値の型を見直す
価格計算と利回り逆算を併用したいときは YIELDMAT関数 を、経過利子の計算には ACCRINTM関数 を組み合わせると、満期利払い証券の評価が一気通貫で完結します。金利感応度(リスク)を測りたいときは DURATION関数 や MDURATION関数 と組み合わせて、ポートフォリオ管理にも展開してみてくださいね。
