1

金融機能 XNPV を開発した人はいますか? この値を計算するコードを探しています。値を計算するためにExcelを呼び出すつもりはありません。

どんな助けでも素晴らしいでしょう、ありがとう

4

3 に答える 3

0

これは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
于 2012-10-04T09:37:42.787 に答える
0

上記のコードを変更し、呼び出し方の例を含めました。.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
于 2013-02-13T16:35:35.307 に答える