PPmt 関数
更新 : 2007 年 11 月
倍精度浮動小数点数型 (Double) の値を返します。定額の支払いを定期的に行い、利率が一定であると仮定して、指定した期に支払われる元金を返します。
Function PPmt( _
ByVal Rate As Double, _
ByVal Per As Double, _
ByVal NPer As Double, _
ByVal PV As Double, _
Optional ByVal FV As Double = 0, _
Optional ByVal Due As DueDate = DueDate.EndOfPeriod _
) As Double
パラメータ
Rate
必ず指定します。投資期間を通じて一定の利率を示す倍精度浮動小数点数型 (Double) の値を指定します。たとえば、年利 (APR) 10% の車のローンを月払いで返済する場合、各期間の利率は 0.1/12 または 0.0083 になります。Per
必ず指定します。金利支払額を求める期を示す倍精度浮動小数点数型 (Double) の値を 1 ~ NPer の範囲で指定します。NPer
必ず指定します。投資期間全体での支払い回数の合計を示す倍精度浮動小数点数型 (Double) の値です。たとえば、4 年の車のローンを月払いで返済する場合、支払い回数は 48 回 (12 回×4 年) になります。PV
必ず指定します。今後の一連の支払いまたは収益の現在の値を示す倍精度浮動小数点型 (Double) の値です。たとえば、車を購入するために資金を借りる場合、現在価値は毎月支払うローンの総額になります。FV
省略可能。投資の将来価値、つまり最後の支払いを行った後に残る現金の収支を示す倍精度浮動小数点数型 (Double) の値。たとえば、ローンなどの借入の将来価値は 0 になります。また、子供の教育費用として 18 年間で 500,000 円貯蓄する場合は、将来価値が 500,000 円になります。このパラメータを省略すると、0 を指定したものと見なされます。Due
省略可能です。支払期日を示すオブジェクト型 DueDate 列挙型 の値を指定します。各期の期末に支払う場合は DueDate.EndOfPeriod を、各期の期首に支払う場合は DueDate.BegOfPeriod をそれぞれ引数に指定します。この引数を省略すると、DueDate.EndOfPeriod を指定したものと見なされます。
例外
例外の種類 |
エラー番号 |
条件 |
---|---|---|
Per <=0 または Per > NPer です。 |
非構造化エラー処理を使用する Visual Basic 6.0 アプリケーションをアップグレードする場合は、「エラー番号」列を参照してください(エラー番号を Number プロパティ (Err オブジェクト) と照らし合わせます)。しかし、可能な限り、このエラー処理は Visual Basic の構造化例外処理の概要 で置き換えてください。
解説
投資とは、一連の定額の支払いを一定の期間行うことです。たとえば、住宅ローンなどのローンまたは毎月の貯蓄プランなどの出資を指します。
引数 Rate および NPer は、単位が同じ支払い期日を使用して計算する必要があります。たとえば、Rate を月単位で計算する場合は、NPer も月単位で計算する必要があります。
出金 (定額預金の支払いなど) を表す引数には負の値を指定し、入金 (配当金など) を表す引数には正の値を指定します。
使用例
次の例は、PPmt 関数を使って、毎月の支払いが同額である場合の特定の期間における元金を計算します。利率 (APR / 12)、支払い元金を求める期 (Period)、支払い回数 (TotPmts)、現在価値または元金 (PVal)、将来価値 (FVal)、支払い期日 (PayType) を指定します。
Sub TestPPMT()
Dim PVal, APR, TotPmts, Payment, Period, P, I As Double
Dim PayType As DueDate
Dim Msg As String
Dim Response As MsgBoxResult
' Define money format.
Dim Fmt As String = "###,###,##0.00"
' Usually 0 for a loan.
Dim Fval As Double = 0
PVal = CDbl(InputBox("How much do you want to borrow?"))
APR = CDbl(InputBox("What is the annual percentage rate of your loan?"))
' Ensure proper form.
If APR > 1 Then APR = APR / 100
TotPmts = CDbl(InputBox("How many monthly payments do you have to make?"))
Response = MsgBox("Do you make payments at the end of month?", MsgBoxStyle.YesNo)
If Response = MsgBoxResult.No Then
PayType = DueDate.BegOfPeriod
Else
PayType = DueDate.EndOfPeriod
End If
Payment = Math.Abs(-Pmt(APR / 12, TotPmts, PVal, FVal, PayType))
Msg = "Your monthly payment is " & Format(Payment, Fmt) & ". "
Msg = Msg & "Would you like a breakdown of your principal and "
Msg = Msg & "interest per period?"
' See if chart is desired.
Response = MsgBox(Msg, MsgBoxStyle.YesNo)
If Response <> MsgBoxResult.No Then
If TotPmts > 12 Then MsgBox("Only first year will be shown.")
Msg = "Month Payment Principal Interest" & vbNewLine
For Period = 1 To TotPmts
' Show only first 12.
If Period > 12 Then Exit For
P = PPmt(APR / 12, Period, TotPmts, -PVal, FVal, PayType)
' Round principal.
P = (Int((P + 0.005) * 100) / 100)
I = Payment - P
' Round interest.
I = (Int((I + 0.005) * 100) / 100)
Msg = Msg & Period & vbTab & Format(Payment, Fmt)
Msg = Msg & vbTab & Format(P, Fmt) & vbTab & Format(I, Fmt) & vbNewLine
Next Period
' Display amortization table.
MsgBox(Msg)
End If
End Sub
必要条件
名前空間 : Microsoft.VisualBasic
モジュール : Financial
アセンブリ : Visual Basic ランタイム ライブラリ (Microsoft.VisualBasic.dll)