【ExcelVBA・マクロ】財務関数(PMT・FV・NPV)の使い方|ローン返済・積立シミュレーションを自動計算する方法【コピペOK】

ExcelVBA

ローンの毎月返済額や、積立投資の将来価値を手計算するのは大変です。ExcelVBAにはPMTFVNPVといった財務関数が標準で用意されており、これらを使えば数行のコードでローン返済シミュレーションや積立計画の自動計算ができます。

この記事では、VBAの財務関数の基本的な使い方を、ローン返済額の計算、積立の将来価値計算、投資判断に使うNPV計算の3パターンで解説します。

スポンサーリンク
スポンサーリンク

VBAの財務関数はワークシート関数と同じ引数で使える

VBAにはPMTFVNPVなどの財務関数が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に応用でき、経理・財務系の自動化マクロを効率よく組み立てられます。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

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