「金利が1%上がったら、うちの社債ポートフォリオって何%下がるの?」と上司に聞かれたとき、電卓を叩かず即答できたら頼もしいですよね。その答えを出す鍵が「修正デュレーション」で、スプレッドシートのMDURATION関数なら一発で計算できますよ。
この記事では、スプレッドシートのMDURATION関数の使い方を、基本構文から金利シナリオの一覧化・ポートフォリオ加重平均・BPV(ベーシスポイントバリュー)・凸性との関係まで、同僚に教える感覚で解説します。DURATION関数との使い分けも整理しているので、経理・財務の金利リスク管理にぜひ活用してくださいね。
スプレッドシートのMDURATION関数とは?
スプレッドシートのMDURATION関数は、定期利付債の修正デュレーション(Modified Duration)を年単位で計算する財務関数です。修正デュレーションは、金利が1単位動いたときに債券価格が何%変化するかの近似値を表す指標で、「金利感応度」とも呼ばれますよ。
計算の仕組みはシンプルで、次のようにDURATION関数が返すマコーレー・デュレーションを「1+利回り÷利払い頻度」で割った値になります。
修正デュレーション = マコーレー・デュレーション ÷ (1 + 利回り ÷ 頻度)
ざっくり覚え方は、「DURATIONで債券の構造を理解し、MDURATIONで金利リスクを計算する」ですよ。債券の金利感応度を数字で示せるので、決算説明会の資料や投資委員会の報告書で、修正デュレーションは定番の指標として使われます。
MDURATION関数の構文と引数
MDURATION関数の構文は次のとおりです。
=MDURATION(受渡日, 満期日, 利率, 利回り, 頻度, [日数計算基準])
英語表記だと =MDURATION(settlement, maturity, rate, yield, frequency, [day_count_convention]) となります。引数の種類と数はDURATION関数と完全に同じです。
| 引数 | 省略 | 説明 |
|---|---|---|
| 受渡日(settlement) | 必須 | 債券の購入日。DATE関数での指定を推奨 |
| 満期日(maturity) | 必須 | 債券の満期日。受渡日より後の日付 |
| 利率(rate) | 必須 | 債券の年利クーポン率(例: 0.03 = 年3%) |
| 利回り(yield) | 必須 | 投資家の年利回り(市場利回り、小数で指定) |
| 頻度(frequency) | 必須 | 年あたりの利払い回数(1, 2, 4のいずれか) |
| 日数計算基準(basis) | 省略可 | 1年の日数計算方式(下表参照、省略時は0) |
頻度(frequency)は「1=年1回払い」「2=半年ごと」「4=四半期ごと」の3種類のみで、それ以外は#NUM!エラーになりますよ。
日数計算基準(basis)の設定値
| 値 | 1年の日数計算 |
|---|---|
| 0(省略時) | 30日/360日(米国NASD方式) |
| 1 | 実際の日数/実際の日数 |
| 2 | 実際の日数/360日 |
| 3 | 実際の日数/365日 |
| 4 | 30日/360日(ヨーロッパ方式) |
日本の国債や社債の実務では basis=1(実際/実際) が定番です。迷ったら対象債券の目論見書で採用方式を確認しておきましょう。
MDURATION関数の基本的な使い方
半年払い社債の修正デュレーションを求める
額面100・年利クーポン3%・半年ごと利払い・期間5年の社債を、市場利回り4%で評価するケースを計算してみましょう。
| セル | 項目 | 値 |
|---|---|---|
| B2 | 受渡日 | 2026/4/21 |
| B3 | 満期日 | 2031/4/21 |
| B4 | クーポン利率 | 0.03 |
| B5 | 利回り | 0.04 |
| B6 | 頻度(半年) | 2 |
=MDURATION(B2, B3, B4, B5, B6, 1)
結果は 約4.49年 になります。同じ条件でDURATION関数を使うと約4.58年なので、マコーレー(4.58)を (1 + 0.04/2) = 1.02 で割った4.49と一致しますよ。電卓でサッと検算できる関係なので、数字の信頼性も確認しやすいです。
直接日付を入れる場合はDATE関数を使うと安全です。
=MDURATION(DATE(2026,4,21), DATE(2031,4,21), 0.03, 0.04, 2, 1)
年1回払い利付国債の修正デュレーションを求める
額面100・年利1.2%・年1回利払い・期間10年の利付国債を、市場利回り1.5%で評価するケースです。
=MDURATION(DATE(2026,4,21), DATE(2036,4,21), 0.012, 0.015, 1, 1)
結果は 約9.33年 になります。DURATION関数の結果(約9.46年)を (1 + 0.015/1) = 1.015 で割った値とほぼ一致しますよ。低クーポン・長期の国債は修正デュレーションも大きく、金利変動の影響を強く受ける債券だとわかります。
DURATIONとMDURATIONを並べて検算する
両関数を横に並べて数字の関係を確認しておくと、後の実務で安心して使えます。
| 項目 | 値 |
|---|---|
| DURATION(マコーレー) | 4.58年 |
| 1 + 利回り/頻度 | 1 + 0.04/2 = 1.02 |
| MDURATION(修正) | 4.58 ÷ 1.02 ≒ 4.49年 |
修正デュレーションは必ずマコーレー・デュレーションより小さくなります。逆転する結果が出たら、どこかの引数を疑うサインですよ。
修正デュレーションの数字の読み方
「4.49」をどう解釈するか
MDURATION関数が返した「4.49」という数字は、金利が1%動いたら、債券価格がおおよそ4.49%反対方向に動くという意味です。金利が上がれば債券価格は下がるので、符号はマイナスで覚えておくとしっくりきますよ。
実務での翻訳フレーズはシンプルです。
- 修正デュレーション 4.5 → 金利+1%で価格-4.5%
- 修正デュレーション 9.3 → 金利+1%で価格-9.3%
- 修正デュレーション 2.0 → 金利+1%で価格-2.0%
「修正デュレーション=金利1%あたりの価格変動率(%)」と丸暗記しておくだけで、数字を見た瞬間にリスクの大きさが体感できますよ。
決算説明会で1分で説明するなら
上司や経営会議で使うときは、次のような一言が効きます。
- 「保有社債の修正デュレーションは4.5です。金利が0.5%上昇すると、およそ2.25%の価格下落が見込まれます」
- 「10年国債のMDURATIONは9.3なので、金利1%の上昇で9%超の含み損になります」
数値の大小ではなく「価格変動率に直接翻訳」する伝え方が、決算説明会や投資委員会では好まれますよ。
金利変動シミュレーションを一覧化する
価格変動率の基本式
修正デュレーションを使った価格変動の概算式はこちらです。
価格変動率 ≒ -MDURATION × 金利変化幅
先ほどの5年物社債(MDURATION 4.49)で、金利が複数シナリオで動いたときの影響を、SUMPRODUCTやセル参照でまとめると実務資料になります。
| 金利変化 | 価格変動率の概算 | 額面1億円の場合の価格変動 |
|---|---|---|
| +0.25% | -1.12% | 約-112万円 |
| +0.50% | -2.25% | 約-225万円 |
| +1.00% | -4.49% | 約-449万円 |
| +2.00% | -8.98% | 約-898万円 |
| -0.50% | +2.25% | 約+225万円 |
| -1.00% | +4.49% | 約+449万円 |
このようなシナリオテスト表をスプレッドシート1枚にまとめておくと、金利動向が動いたときの有価証券含み損益の試算に何度でも使えますよ。
金利変化幅からセルで計算する実装例
セルA2に金利変化幅(例: 0.01 = +1%)、B2にMDURATIONを置くとします。
=-B2*A2
これで価格変動率(小数)が出せます。額面金額C2を掛ければ実額リスクに変わりますよ。
=-B2*A2*C2
シナリオ表ではA列を動かすだけで結果が自動更新されるので、金利上昇メッセージが出た日に3分で損益影響を出せる体制が作れます。
ポートフォリオ全体の加重平均MDURATIONを計算する
複数銘柄は時価加重で合算する
複数の債券を保有している場合、ポートフォリオ全体の修正デュレーションは各銘柄のMDURATIONを時価で加重平均して求めます。
| 銘柄 | MDURATION | 時価(億円) |
|---|---|---|
| A社 5年社債 | 4.49 | 10 |
| B省 10年国債 | 9.33 | 15 |
| C社 3年社債 | 2.80 | 5 |
ポートフォリオ全体のMDURATIONは次の式で計算できますよ。
加重平均MDURATION = Σ(各銘柄MDURATION × 各銘柄時価) ÷ 総時価
SUMPRODUCT関数で一発計算
スプレッドシートならSUMPRODUCT関数(配列の対応要素同士を掛けて合計する関数)が便利です。B列にMDURATION、C列に時価が入っているなら、次の数式で計算できます。
=SUMPRODUCT(B2:B4, C2:C4) / SUM(C2:C4)
上の例なら (4.49×10 + 9.33×15 + 2.80×5) / 30 = 6.62 となり、ポートフォリオ全体の修正デュレーションは約6.62です。金利が1%上昇したらポートフォリオは約6.62%の含み損、という概算ができますね。
実務ではこの加重平均値をモニタリング指標として定期レポートに載せます。ALM(資産負債管理)担当なら、負債側の修正デュレーションと突き合わせてギャップを管理するのが基本ですよ。
BPV(ベーシスポイントバリュー)で実額リスクを測る
BPVとは「1bp動いたときの金額変動」
実務では「価格変動率」ではなく「金額」で報告することも多いです。そんなときに使うのがBPV(ベーシスポイントバリュー)で、金利が1bp(0.01%)動いたときの金額変動を表しますよ。
計算式はシンプルです。
BPV = 金額 × MDURATION × 0.0001
額面10億円・MDURATION 4.49の社債なら、BPVは次のように計算できます。
=10_0000_0000 * 4.49 * 0.0001
→ 約449,000円
「金利が1bp上昇すると約44.9万円の含み損」という感覚が、一発でつかめますよ。
リスク管理部門との共通言語
BPVはリスク管理部門やトレーディング部門との会話に出てくる定番指標です。各銘柄のBPVを足し合わせれば、ポートフォリオ全体のBPVも出せます。
| 銘柄 | 金額(億円) | MDURATION | BPV(円) |
|---|---|---|---|
| A社 5年社債 | 10 | 4.49 | 449,000 |
| B省 10年国債 | 15 | 9.33 | 1,399,500 |
| C社 3年社債 | 5 | 2.80 | 140,000 |
| 合計 | — | — | 1,988,500 |
ポートフォリオBPVが約199万円なら、「金利が1bp動くと200万円前後の含み損益が動く」とシンプルに報告できますよ。「1bpで何円動く?」はリスク管理の共通言語なので、BPVで報告する習慣をつけておくと社内コミュニケーションがスムーズです。
DURATION関数との使い分け
構造把握 vs. 価格変動概算
DURATION関数とMDURATION関数は似ていますが、役割がはっきり分かれます。
| 観点 | DURATION(マコーレー) | MDURATION(修正) |
|---|---|---|
| 返す値 | 加重平均回収期間 | 金利感応度(価格変動率の近似) |
| 単位 | 年 | %/金利1単位 |
| 計算式 | 各CFの現在価値加重平均 | マコーレー ÷ (1 + 利回り/頻度) |
| 主な用途 | キャッシュフロー構造の把握 | 金利変動による価格変動の見積もり |
| 実務の出番 | 「何年で回収できるか」を見るとき | 「金利1%でいくら動くか」を見るとき |
実務の流れに当てはめると
金利リスク分析でよくある一連の流れはこちらです。
- YIELD関数で現在の市場利回りを計算する
- その利回りをDURATION関数に入れて、マコーレー・デュレーションで回収構造を確認する
- MDURATION関数で金利感応度を出し、シナリオテストで価格変動を概算する
- 精緻な価格はPRICE関数で逆算して検証する
このようにDURATIONで構造、MDURATIONでリスクの数値化、PRICEで精緻化という使い分けを覚えておくと、どの関数に手を伸ばせばよいか迷わなくなりますよ。
凸性(コンベクシティ)でMDURATIONの誤差を補正する
金利変化が大きいと誤差が増える
MDURATIONを使った価格変動の概算は、金利変化幅が小さい範囲でよく合う近似式です。債券価格と金利の関係は直線ではなく下に凸のカーブなので、金利変化が大きくなるとMDURATIONだけでは誤差が出てきますよ。
この誤差を補正する概念が凸性(コンベクシティ、Convexity)です。凸性は、金利変化に対する価格カーブの「曲がり具合」を表す指標で、次のような性質を持ちます。
- 金利が大きく上昇したとき、MDURATIONだけだと価格下落を過大に見積もる
- 金利が大きく下落したとき、MDURATIONだけだと価格上昇を過小に見積もる
- 凸性を加えると、どちら側の誤差も補正できる
実務での使いどころ
スプレッドシートの標準関数には凸性を直接返すものはありませんが、実務では次のような使い分けが定着しています。
- 金利変化幅が±1%以内: MDURATIONだけで十分
- 金利変化幅が±2%以上: 凸性も加味するか、PRICE関数で実際の価格を直接計算する
ざっくり目安として「2%を超える大きな金利変化はPRICE関数で直接検証する」を覚えておけば、MDURATIONの限界でつまずきません。凸性は金融の専門書でじっくり学ぶ領域なので、ここではまずMDURATIONの誤差範囲だけ頭に入れておけば十分ですよ。
よくあるエラーと対処法
#NUM!エラー
以下のケースで発生します。
| 発生条件 | 対処法 |
|---|---|
| 受渡日 ≥ 満期日 | 受渡日が満期日より前になるよう修正する |
| 頻度が 1, 2, 4 以外 | 1、2、4のいずれかに修正する |
| basis が 0〜4 以外 | 0、1、2、3、4のいずれかに修正する |
| 利率が負の値 | 0以上の利率を指定する |
| 利回りが負の値 | 0以上の利回りを指定する |
よくあるのが頻度の指定ミスで、月1回払いを想定して「12」を入れるとエラーになりますよ。MDURATION関数は年1回・半年・四半期の3パターンしか対応しないので気をつけてくださいね。
#VALUE!エラー
引数に数値・日付以外の文字列が入っている場合に発生します。日付を直接書くときは DATE(2026,4,21) のようにDATE関数を使うと確実です。セル参照の場合は、参照先のセルが日付書式になっているかも合わせて確認しましょう。
#NAME?エラー
関数名のスペルミスが原因です。「MDURATON」「MODURATION」のような打ち間違いが典型例ですよ。入力候補から選ぶようにすれば防げます。また、DURATION関数と混同して「DURATION」と打ってしまうケースもあるので、修正デュレーションを出したいときは必ず頭にMが付いているか確認してくださいね。
結果がDURATIONより大きくなる
定義上、修正デュレーションはマコーレー・デュレーションより必ず小さくなります。MDURATIONの結果がDURATIONより大きい場合、数式や参照セルを取り違えている可能性が高いので、引数を見直してみてくださいね。
Excelとの互換性
MDURATION関数はExcelとGoogleスプレッドシートで同じ計算結果を返します。Excelファイル(.xlsx)をスプレッドシートで開いても動作はそのままですよ。
スプレッドシートでは引数名が日本語(「受渡日」「満期日」「利率」「利回り」「頻度」「日数計算基準」)で表示されます。Excelの英語表記(settlement、maturity、rate、yield、frequency、basis)と見た目は違いますが、動作は完全に同じです。
DURATION関数もExcel・スプレッドシート間で互換性があるので、両方の環境で同じ分析ファイルを共有できます。チーム内で金利リスク分析のテンプレートを統一しやすいですよ。
まとめ
スプレッドシートのMDURATION関数は、定期利付債の修正デュレーション(金利感応度)を計算する財務関数です。ポイントをまとめておきます。
- 引数は受渡日・満期日・利率・利回り・頻度の5つが必須。日数計算基準(basis)は省略可
- 頻度(frequency)は 1, 2, 4 のいずれかのみ(年1回/半年/四半期)
- 返す値は金利感応度。「4.5」なら金利1%上昇で価格約4.5%下落と翻訳する
- 価格変動率 ≒ -MDURATION × 金利変化幅 で概算できる
- 複数銘柄のポートフォリオはSUMPRODUCT関数で時価加重平均MDURATIONを算出する
- BPV = 金額 × MDURATION × 0.0001 で1bpあたりの実額リスクを出せる
- DURATION関数との使い分けは「構造把握 vs. 価格変動概算」
- 大きな金利変化(±2%超)は凸性の影響で誤差が増えるので、PRICE関数で直接検証する
金利動向が注目される局面では、修正デュレーションを使った金利リスクのモニタリングが決算・投資判断の定番業務になります。MDURATION関数をYIELD関数・PRICE関数・DURATION関数とセットで使いこなして、保有債券の金利リスクをサッと数値化できるようになっておくと、経理・財務の現場で一段頼りにされますよ。名前が紛らわしいPDURATION関数は投資期間を求める別物なので、こちらもあわせてチェックしておくと安心ですね。
