ローンの毎月返済額や、積立投資の将来価値を手計算するのは大変です。ExcelVBAにはPMT・FV・NPVといった財務関数が標準で用意されており、これらを使えば数行のコードでローン返済シミュレーションや積立計画の自動計算ができます。
この記事では、VBAの財務関数の基本的な使い方を、ローン返済額の計算、積立の将来価値計算、投資判断に使うNPV計算の3パターンで解説します。
VBAの財務関数はワークシート関数と同じ引数で使える
VBAにはPMT・FV・NPVなどの財務関数がVBA関数として直接組み込まれています。ワークシートで使う=PMT()などの関数とほぼ同じ引数構成なので、Excelの関数を知っていればそのままVBAでも使えます。
主な財務関数は以下のとおりです。
| 関数 | 用途 |
|---|---|
| PMT | 定期支払額(ローンの毎月返済額など)を計算 |
| FV | 将来価値(積立の満期時点の金額)を計算 |
| PV | 現在価値を計算 |
| NPV | 正味現在価値(投資判断)を計算 |
| Rate | 利率を逆算 |
PMT関数でローンの毎月返済額を計算する
PMT関数は、借入額・利率・返済回数から、毎月(または毎期)の返済額を計算します。
Sub CalcLoanPayment()
Dim annualRate As Double
Dim years As Integer
Dim loanAmount As Double
Dim monthlyPayment As Double
annualRate = 0.02 ' 年利2%
years = 10 ' 返済期間10年
loanAmount = 3000000 ' 借入額300万円
monthlyPayment = Application.WorksheetFunction.Pmt( _
Rate:=annualRate / 12, _
Nper:=years * 12, _
Pv:=-loanAmount)
MsgBox "毎月の返済額は " & Format(monthlyPayment, "#,##0") & " 円です。"
End Sub
ポイントは以下の3点です。
Rateには「年利÷12」で月利を渡すNper(返済回数)は「年数×12」で月数に変換するPv(借入額)はマイナス値で渡す(お金を受け取る=マイナスという会計上の符号ルール)
Pvをマイナスで渡すことで、戻り値のPMTはプラスの金額として返ってきます。符号を間違えるとマイナスの返済額が表示されてしまうので注意しましょう。
なお、Application.WorksheetFunction.Pmtを使わずVBA組み込みのPMT関数をそのまま呼び出すこともできます。
monthlyPayment = PMT(annualRate / 12, years * 12, -loanAmount)
どちらの書き方でも結果は同じです。
FV関数で積立の将来価値を計算する
FV関数は、毎月一定額を積み立てた場合、満期時点でいくらになるかを計算します。
Sub CalcFutureValue()
Dim annualRate As Double
Dim years As Integer
Dim monthlyDeposit As Double
Dim futureValue As Double
annualRate = 0.01 ' 年利1%
years = 20 ' 積立期間20年
monthlyDeposit = 30000 ' 毎月の積立額3万円
futureValue = Application.WorksheetFunction.Fv( _
Rate:=annualRate / 12, _
Nper:=years * 12, _
Pmt:=-monthlyDeposit)
MsgBox "20年後の積立総額は " & Format(futureValue, "#,##0") & " 円です。"
End Sub
Pmt(毎月の積立額)もマイナスで渡すのがPMT関数と同じルールです。積立額を支払う側なのでマイナス、戻ってくる将来価値はプラスで表示されます。
複数条件のシミュレーションを一覧表にする
セルに条件を入力しておき、複数パターンをまとめて計算するマクロも実務でよく使われます。
Sub CalcMultiplePlans()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ActiveSheet
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' A列:借入額 B列:年利 C列:返済年数 D列:毎月返済額(計算結果)
For i = 2 To lastRow
ws.Cells(i, "D").Value = Application.WorksheetFunction.Pmt( _
Rate:=ws.Cells(i, "B").Value / 12, _
Nper:=ws.Cells(i, "C").Value * 12, _
Pv:=-ws.Cells(i, "A").Value)
Next i
MsgBox "計算が完了しました。"
End Sub
A〜C列に条件を並べておけば、D列に各パターンの毎月返済額が自動入力されます。借入額や利率を変えた複数プランの比較表を作りたいときに便利です。
NPV関数で投資判断を行う
NPV(正味現在価値)は、将来のキャッシュフローを現在価値に割り引いて合計する関数で、投資案件の採算性を判断する際に使われます。
Sub CalcNPV()
Dim discountRate As Double
Dim cashFlows(1 To 5) As Double
Dim initialInvestment As Double
Dim npvResult As Double
discountRate = 0.05 ' 割引率5%
initialInvestment = 1000000 ' 初期投資額100万円
' 1年目〜5年目のキャッシュフロー(見込み利益)
cashFlows(1) = 200000
cashFlows(2) = 250000
cashFlows(3) = 300000
cashFlows(4) = 300000
cashFlows(5) = 350000
npvResult = Application.WorksheetFunction.Npv(discountRate, cashFlows) - initialInvestment
If npvResult > 0 Then
MsgBox "NPVは " & Format(npvResult, "#,##0") & " 円でプラスのため、投資価値ありと判断できます。"
Else
MsgBox "NPVは " & Format(npvResult, "#,##0") & " 円でマイナスのため、投資は見送るべきです。"
End If
End Sub
Npv関数自体には初期投資額を含めず、将来のキャッシュフローだけを渡します。計算結果から初期投資額を差し引くことで、正味の投資価値(NPV)が求まります。NPVがプラスであれば、その投資は割引率を上回るリターンが期待できると判断できます。
まとめ
VBAの財務関数を使えば、ローン返済額(PMT)、積立の将来価値(FV)、投資判断(NPV)といった複雑な金融計算も数行のコードで実現できます。
いずれの関数も「支払う側の金額はマイナス、受け取る金額はプラス」という符号ルールに注意が必要です。このルールさえ押さえておけば、ワークシート関数の知識をそのままVBAに応用でき、経理・財務系の自動化マクロを効率よく組み立てられます。


コメント