VBA

【VBA】VBA×投資 PMT関数で目標金額からひと月あたりの積立金額を計算

記事内に商品プロモーションを含む場合があります

こんにちは、hokkyokunです。

目標に向けて投資を頑張ろうって方いらっしゃると思いますが、
目標額から月々の積立金額って案外わからないものです。
複利が付きますからね。

銀行とか証券会社とかのウェブサイトに計算してくれるサイトあると思いますが、
いちいち見に行くの面倒ですよね。

しかもほとんどの場合、結果を記録できないから
毎回調べるのは不便ですよね。

エクセル上で簡単に作れます。
マクロを使えばシミュレーションもできるので
やってみましょう。

1回あたりの積立金額はPMT関数を使って計算

エクセル上で使える関数でPMT関数があるのですが、
1回あたりの積立金額を計算することができます。

  • 構文
    Pmt(rate,nper pv[,fv[,type]])
  • 引数
    rate:利率(年利)→毎月投資なら月利に変換が必要
    nper:回数 →何か月投資するかを入力(1年なら12か月)
    pv:現在の貯蓄額 →手元にいくらあるか
    fv:目標金額
    type:期日計算 →期末もしくは期首を選択できるがどちらでもよい

具体的に計算してみよう

具体的に計算してみましょう。
利率6.5%、積立年数20年、現在の貯蓄額500万円とし、目標金額6000万円に向けて、一月あたりの積立金額を出してみましょう。

PMT(0.065/12 , 20*12 , 5000000 , 60000000)となります。
Rate(利率)は年利を月利に変換するため0.065/12
積立期間は月数に変換するので20*12
となります。

計算結果は約85,000円ですね。

過程をマクロでシミュレーションしてみよう

マクロを使って積立の過程も計算してみます。
証券会社等のホームページであるようなやつマクロで作ってみました。

Sub 一回当たりの積立金額計算()

Application.ScreenUpdating = False '画面更新停止(スピードアップ)
Dim ws As Worksheet 'シートの変数
Dim table As ListObject 'テーブルの変数
Dim Rate As Double '利率
Dim Nper As Long '積立回数
Dim Pmt As Long '毎月の積立金額
Dim Pv As Long '頭金
Dim FV As Long '目標金額
Dim sttday As Date '開始日
Dim i As Long 'For文のための変数


Set ws = ThisWorkbook.Worksheets("毎月の積立金額")
Set table = ws.ListObjects(1)

'入力値を代入
With ws
    Rate = .Range("C4").Value '利率
    Nper = .Range("C5").Value * 12 + .Range("C6").Value '積立回数=積立する月数
    Pv = .Range("C9").Value '手元にある金額
    FV = .Range("C10").Value '目標金額
    Pmt = .Range("C11").Value '毎月の積立金額
    sttday = .Range("C7").Value & "/" & .Range("C8").Value & "/01" '開始月を作成
End With

'テーブルのデータを消します。
On Error Resume Next
    table.DataBodyRange.Delete
On Error GoTo 0

'For文で積立回数分まわします。
For i = 1 To Nper

    'テーブルのデータ(レコード)を追加します。
    With table.ListRows.Add
    
        .Range(1).Value = Format(sttday, "yyyy""年""m""月""") '年月
        .Range(2).Value = Pmt * i '積立金額の合計
        
        '利回り後の評価額です。小数点以下を切り捨てるために関数を重ねています。
        .Range(3).Value = WorksheetFunction.Round(WorksheetFunction.FV(Rate / 12, i, Pmt, Pv) * -1, 0)
        .Range(4).Value = (.Range(3).Value - (.Range(2).Value + Pv)) / (.Range(2).Value + Pv) * 100
'        .Range(4).Value = .Range(3).Value - (.Range(2).Value + Pv) '評価額-(積立額+頭金)
        
        '評価額/最終的な積立金額で達成率を出しています。
        .Range(5).Value = .Range(3).Value / FV * 100
        
'        .Range(5).Value = Format((.Range(3).Value / FV) * 100, "#.#")
    End With
    sttday = DateAdd("m", 1, sttday) '年月を一月プラスして次の月を代入します。
Next i
End Sub

Sub clear()

Dim table As ListObject

Set table = ThisWorkbook.Worksheets("毎月の積立金額").ListObjects(1)

table.DataBodyRange.Delete


End Sub

こんな感じに表をつくります。

ボタンを押すとこんな感じでシミュレーションができます。

評価額と積立額の折れ線グラフと
達成率のグラフを付けておきました。

もちろん後から通常のエクセルのようにグラフの加工や追加は可能です。

データ削除ボタンを押すとデータをクリアできます。

マクロファイルのダウンロード

こちらからダウンロードできます。

[wpdm_package id=’9963′]