【VBAリファレンス|実務向け】第7回 財務関数でローンや積立の計算に挑戦 2/5

スポンサーリンク

導入:なぜ財務関数をVBAで扱う必要があるのか

Excelのワークシート上でPMT関数を使うことは一般的ですが、実務では「複数のローン条件を比較したい」「複雑な返済シミュレーションを自動生成したい」といったニーズが頻繁に発生します。手作業でセルに式を入力するのではなく、VBAを使って計算を自動化することで、人的ミスを防ぎ、膨大なシミュレーションを瞬時に完了させることが可能になります。今回は、財務関数の要であるPMT関数をVBAで制御する方法を解説します。

基礎知識:PMT関数の仕組み

PMT関数は「利率」「期間」「現在価値」「将来価値」を引数に取ることで、定期的な支払額を算出します。VBAで扱う際は、WorksheetFunctionオブジェクトを使用します。
ここで最も重要なのが「プラス」と「マイナス」の考え方です。
・現在価値(借入額など):手元に入るお金は「プラス」、返済すべきお金は「マイナス」として扱います。
・将来価値(積立目標など):将来受け取るお金は「プラス」、将来支払うお金は「マイナス」として考えます。この符号を間違えると計算結果が正しく出ないため、注意が必要です。

実装/解決策:VBAでPMT関数を呼び出す

VBAからPMT関数を呼び出すには、以下のように記述します。
Application.WorksheetFunction.Pmt(利率, 期間, 現在価値, 将来価値)

利率については、セル上の計算と同様に「年利/12」として月利に変換して渡すのが実務上の定石です。

サンプルプログラム:毎月の返済額を算出する

以下のコードは、借入額、期間、年利を入力して、月々の返済額をイミディエイトウィンドウに出力するシンプルな例です。

Sub CalculateLoanPayment()
‘ 変数の定義
Dim loanAmount As Double ‘ 借入額
Dim annualRate As Double ‘ 年利
Dim months As Integer ‘ 返済期間(月数)
Dim monthlyPayment As Double

‘ 値の設定(実務ではセルから取得すると便利です)
loanAmount = 1000000 ‘ 100万円
annualRate = 0.02 ‘ 年利2%
months = 60 ‘ 5年(60ヶ月)

‘ PMT関数で計算
‘ 第3引数の現在価値は、借り入れるのでマイナスを指定
‘ 第4引数の将来価値は、完済するため0を指定
monthlyPayment = Application.WorksheetFunction.Pmt( _
annualRate / 12, _
months, _
-loanAmount, _
0)

‘ 結果をイミディエイトウィンドウに表示
Debug.Print “月々の返済額: ” & Format(monthlyPayment, “#,

0″) & “円”

End Sub

応用・注意点:現場で役立つヒント

1. エラーハンドリング:期間が0の場合、PMT関数はエラーを返します。計算前に期間が0以上であることをチェックするIF文を入れるのが安全です。
2. 端数処理:銀行の返済額などは「切り上げ」や「四捨五入」が行われることが一般的です。PMT関数の結果をそのまま使わず、Round関数やWorksheetFunction.RoundUpなどを組み合わせて調整してください。
3. 現在価値の考え方:積立計算の場合、現在価値を「0」にし、将来価値を「-目標額」にすることで、毎月の積立額を算出できます。この符号の切り替えを理解しておくと、ローンの計算と積立の計算を同じロジックで扱うことができます。

まずはこのコードをコピーして、ご自身の環境で実行してみてください。符号を変えるだけで計算の性質がどう変わるか、実験してみるのも理解を深める近道です。

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