ExcelのPRICEMAT関数の使い方|満期利払い証券の価格を計算する方法

スポンサーリンク

満期にまとめて利息を払う証券(満期利払い証券)の価格を、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米国社債のデフォルト
1Actual/Actual米国財務省証券
2Actual/360米国短期金融商品
3Actual/365日本国内債券
4European 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%
B7basis0

数式: =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 が必要

関数を選ぶ判断フロー

  1. クーポン(利息)はあるか?
  1. 利息は定期的に支払われるか?
  • 半年や年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」と入力すると環境によってエラーになる場合があるので、シリアル値で渡すのが安全

計算結果が異常になる場合

rateyld を「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関数 と組み合わせて、ポートフォリオ管理にも展開してみてくださいね。

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