「利回り3%で社債を買いたいけど、額面に対していくらで買えば妥当なのか?」と聞かれてサッと答えられると、経理・財務の現場ではかなり頼りにされますよね。半年ごと・年1回といった定期的に利息を受け取れる利付債では、希望利回りに対応する理論価格をスプレッドシートのPRICE関数で計算できますよ。
この記事では、スプレッドシートのPRICE関数の使い方を、構文から実務の活用例・よくあるエラーの対処まで同僚に教える感覚で解説します。PRICEDISC関数・PRICEMAT関数との使い分けもあわせて整理しているので、社債・国債の理論価格チェックに活用してください。
スプレッドシートのPRICE関数とは?
スプレッドシートのPRICE関数は、定期的に利息を支払う利付債について、希望利回り(要求利回り)に対応する額面100あたりの価格を計算する財務関数です。
「定期利付債」とは、半年ごとや年1回などのタイミングでクーポン(利息)を受け取り、満期日に額面金額を受け取るタイプの債券です。社債・利付国債・地方債などがこれにあたります。
PRICE関数が返すのは「額面100に対する理論価格」です。市場利回りや希望利回りを入力すると、そこから逆算して「いくらで買えば、満期まで持ったときにその利回りになるか」を計算できますよ。
PRICE関数の構文と引数
PRICE関数の構文は次のとおりです。
=PRICE(受渡日, 満期日, 利率, 利回り, 満期受取額, 頻度, [日数計算基準])
英語表記だと =PRICE(settlement, maturity, rate, yield, redemption, frequency, [basis]) となります。
| 引数 | 省略 | 説明 |
|---|---|---|
| 受渡日(settlement) | 必須 | 債券の購入日(支払い完了日)。DATE関数での指定を推奨 |
| 満期日(maturity) | 必須 | 債券の満期日。受渡日より後の日付を指定する |
| 利率(rate) | 必須 | 債券の年利クーポン率(例: 0.03 = 年3%) |
| 利回り(yield) | 必須 | 投資家の希望年利回り(市場利回り) |
| 満期受取額(redemption) | 必須 | 額面100に対する満期受取額(通常は100) |
| 頻度(frequency) | 必須 | 年あたりの利払い回数(1=年1回、2=半年ごと、4=四半期ごと) |
| 日数計算基準(basis) | 省略可 | 1年の日数計算方式(下表参照、省略時は0) |
日数計算基準(basis)の設定値
| 値 | 1年の日数計算 |
|---|---|
| 0(省略時) | 30日/360日(米国NASD方式) |
| 1 | 実際の日数/実際の日数 |
| 2 | 実際の日数/360日 |
| 3 | 実際の日数/365日 |
| 4 | 30日/360日(ヨーロッパ方式) |
満期受取額(redemption)は額面100を基準にした数値を入れる点に注意してください。実際の額面金額(1,000,000円など)ではなく、100で固定するのが基本ですよ。返ってくる価格も同じく額面100を基準にしたスケールです。
PRICE関数の基本的な使い方
半年払い社債の理論価格を求める
額面100・年利3%・半年ごと利払い・期間5年の社債を、希望利回り4%で買う場合の理論価格を求めてみましょう。
| セル | 項目 | 値 |
|---|---|---|
| B2 | 受渡日 | 2026/4/21 |
| B3 | 満期日 | 2031/4/21 |
| B4 | 利率(クーポン) | 0.03 |
| B5 | 希望利回り | 0.04 |
| B6 | 満期受取額 | 100 |
| B7 | 頻度(半年) | 2 |
=PRICE(B2, B3, B4, B5, B6, B7, 1)
結果は 約95.51(額面100に対して約95.51) です。利回り4%を確保するには、額面100の社債を約95.51で買う必要があるということですよ。額面1,000万円分なら購入価格は約955.1万円が目安になります。
直接日付を入れる場合はDATE関数を使います。
=PRICE(DATE(2026,4,21), DATE(2031,4,21), 0.03, 0.04, 100, 2, 1)
年1回払い利付国債の理論価格を求める
額面100・年利1.2%・年1回利払い・期間10年の利付国債を、希望利回り1.5%で買う場合を計算します。
=PRICE(DATE(2026,4,21), DATE(2036,4,21), 0.012, 0.015, 100, 1, 1)
結果は 約97.23 です。クーポン率と希望利回りの差が小さいので、額面に近い価格になりますよ。利付国債の入札時の理論価格チェックや、既発債の市場価格との比較に便利です。
クーポン率と利回りの大小で価格が変わることを確認する
PRICE関数の結果は、クーポン率と希望利回りの関係で次のように変わります。
| 関係 | 価格の傾向 | 例(5年・半年払い・basis=1) |
|---|---|---|
| クーポン率 < 利回り | 額面より安く(ディスカウント) | 利率3%・利回り4% → 約95.51 |
| クーポン率 = 利回り | 額面とほぼ同じ | 利率4%・利回り4% → 約100.00 |
| クーポン率 > 利回り | 額面より高く(プレミアム) | 利率5%・利回り4% → 約104.49 |
「希望利回りがクーポン率より高い → 額面より安く買えないと割に合わない」という直感どおりの結果になりますよ。市場利回りが上昇すると債券価格が下がる、という債券の基本的な値動きもこの関数で確認できます。
PRICEDISC・PRICEMATとの使い分け
債券の価格計算系関数には、PRICEのほかにPRICEDISC関数とPRICEMAT関数があります。3つの違いは「対象とする債券のタイプ」です。
| 関数 | 対象債券 | 利息の扱い |
|---|---|---|
| PRICE関数 | 定期利付債 | 期中にクーポン受取あり |
| PRICEDISC関数 | 割引債(ゼロクーポン債) | 期中の利息なし、満期に額面受取 |
| PRICEMAT関数 | 満期利付債 | 利息は満期にまとめて受取 |
判断ポイントは「いつ・どのように利息を受け取るか」です。半年や年1回など定期的にクーポンを受け取る一般的な社債・利付国債ならPRICE関数、利息ゼロで割引発行ならPRICEDISC関数、満期一括で利息を受け取るタイプならPRICEMAT関数を使いますよ。
同じ条件での違いを確認する
例えば額面100・受渡日2026/4/21・満期日2027/4/21・利回り3%・basis=1の場合:
| 関数 | 数式 | 結果の意味 |
|---|---|---|
| PRICE関数(年1回払い・利率2%) | =PRICE(DATE(2026,4,21),DATE(2027,4,21),0.02,0.03,100,1,1) | 約99.03(クーポンあり) |
| PRICEDISC関数 | =PRICEDISC(DATE(2026,4,21),DATE(2027,4,21),0.03,100,1) | 約97.00(割引のみ) |
| PRICEMAT関数(発行日同日・利率2%) | =PRICEMAT(DATE(2026,4,21),DATE(2027,4,21),DATE(2026,4,21),0.02,0.03,1) | 約99.04(満期一括利息) |
クーポンが期中で受け取れるPRICE関数のほうが、同じ利回り条件でも価格が高めになる傾向がありますよ。
よくあるエラーと対処法
#NUM!エラー
以下のケースで発生します。
| 発生条件 | 対処法 |
|---|---|
| 受渡日 ≥ 満期日 | 受渡日が満期日より前になるよう修正する |
| 利率が負の数 | 0以上の数値を指定する |
| 利回りが負の数 | 0以上の数値を指定する |
| 満期受取額が0以下 | 正の数値を指定する(通常は100) |
| 頻度が 1, 2, 4 以外 | 1(年1回), 2(半年), 4(四半期)のいずれかを指定する |
| basis が 0〜4 以外 | 0, 1, 2, 3, 4 のいずれかを指定する |
頻度(frequency)は 1・2・4 の3択 という制約に注意してください。月1回(12)や年6回(6)といった指定はできませんよ。
#VALUE!エラー
引数に数値や日付以外の文字列が入っている場合に発生します。日付を直接書くときは DATE(2026,4,21) のようにDATE関数を使うと確実ですよ。
#NAME?エラー
関数名のスペルミスが原因です。「PRISE」「PRICES」などは存在しない関数名です。入力候補から選ぶようにしましょう。
Excelとの互換性
PRICE関数はExcelとGoogleスプレッドシートで同じ計算結果を返します。Excelファイル(.xlsx)をスプレッドシートで開いても関数はそのまま動作しますよ。
スプレッドシートでは引数名が日本語(「受渡日」「満期日」「利率」「利回り」「満期受取額」「頻度」「日数計算基準」)で表示されます。Excelの英語表記(settlement、maturity、rate、yield、redemption、frequency、basis)と見た目は異なりますが、動作に影響はありません。
まとめ
スプレッドシートのPRICE関数は、定期的に利息を支払う利付債について、希望利回りに対応する額面100あたりの価格を計算する財務関数です。ポイントをまとめておきます。
- 引数は受渡日・満期日・利率・利回り・満期受取額・頻度の6つが必須。日数計算基準(basis)は省略可
- 満期受取額は額面100を基準にした数値を入れる。返ってくる価格も100基準
- 頻度は 1, 2, 4 の3択。それ以外を指定すると #NUM! エラーになる
- クーポン率より希望利回りが高ければ価格は額面より安くなる(ディスカウント)
- 割引債ならDISC関数系の PRICEDISC関数、満期利付債なら PRICEMAT関数 を使い分ける
- 日付には DATE関数を使うと文字列とのトラブルを防げる
- Excelとの互換性があり、.xlsxファイルをそのまま開いても動作する
社債や利付国債の理論価格チェック、希望利回りに対応する適正価格のシミュレーションにぜひ活用してみてください。財務関数の使い分けには、DISC関数・INTRATE関数・RECEIVED関数の記事もあわせて参考にしてみてくださいね。
