金融機能 XNPV を開発した人はいますか? この値を計算するコードを探しています。値を計算するためにExcelを呼び出すつもりはありません。
どんな助けでも素晴らしいでしょう、ありがとう
金融機能 XNPV を開発した人はいますか? この値を計算するコードを探しています。値を計算するためにExcelを呼び出すつもりはありません。
どんな助けでも素晴らしいでしょう、ありがとう
これはc#での正しい実装だと思います:
public double XNPV(decimal[] receipts,DateTime[] dates, double dRate, DateTime issueDate, decimal cf, int x)
{
double sum;
for(int i =0;i<dates.Length;i++)
{
TimeSpan ts = dates[i].Subtract(issuedate);
sum +=receipts[i] / ((1 + dRate / cf) ^ ((ts.TotalDays / 360) * cf));
}
return sum;
}
これはVBで同等です:
Public Function XNPV(ByVal Receipts() As Decimal, ByVal Dates() As Date, ByVal dRate As Double, ByVal IssueDate As Date, ByVal CF As Decimal, ByVal x As Integer) As Double
Dim i As Integer
Dim sum As Double
For i = 0 To UBound(Dates)
sum = sum + Receipts(i) / ((1 + dRate / CF) ^ ((DateDiff / 360) * CF))
XNPV = sum
End Function
上記のコードを変更し、呼び出し方の例を含めました。.1 の代わりに変動割引率を使用するように適応するのは簡単です。
Public Function XNPV(ByVal Receipts() As Decimal, ByVal Dates() As Date, ByVal dRate As Double, ByVal StartDate As Date) As Double
Dim i As Integer = 0
Dim dXNPV As Double = 0
Dim dXRate As Double = 1 + dRate
Dim dDayOfCF As Long = 0
Dim dAdj As Double = 0
Dim dResult As Double = 0
For i = 0 To UBound(Dates)
dDayOfCF = (DateDiff(DateInterval.Day, StartDate, Dates(i)))
dAdj = (dDayOfCF / 365)
dXNPV = Receipts(i) / (dXRate ^ dAdj)
dResult += dXNPV
Next
XNPV = dResult
End Function
Private Sub SimpleButton2_Click(sender As System.Object, e As System.EventArgs) Handles SimpleButton2.Click
Dim tblReceipts(2) As Decimal
Dim tblDates(2) As DateTime
Dim dtStartDate As DateTime = "1/1/13"
Dim XNPVResult As Decimal = 0
tblReceipts(0) = -100000
tblReceipts(1) = 500000
tblReceipts(2) = 2000000
tblDates(0) = "1/1/13"
tblDates(1) = "1/7/13"
tblDates(2) = "1/1/15"
'xCF = 1 + DateDiff(DateInterval.Day, dtIssueDate, tblDates(2))
XNPVResult = XNPV(tblReceipts, tblDates, 0.1, dtStartDate)
MsgBox(XNPVResult)
End Sub