请教VB高手,XIRR()
各位前辈,我现在需要一函数,功能和EXCEL中的XIRR()函数一样,请问VB语言怎么写,最好能给我份写好的功能代码,本人的技术很差的。我用的平台是VB6.0,
答案:'第一次听说xirr函数,看了一下这个函数的描述给你用递归来计算,其中用了一些方法可以高速接近目标,最高精度可以达到10^-11
'未作错误判断,你可以在调用函数前作一下判断
'函数描述: http://office.microsoft.com/zh-tw/excel-help/HP010343042.aspx
Option Explicit
Const N = 5 '假设5组数字
Dim precision As Double, myvalue As Double
Sub Command1_Click()
Dim cells(), t1, t2, i As Integer
ReDim cells(N, 2)
precision = 0.1 '精度设定
If precision < 10 ^ -12 Then Exit Sub '超精度退出
t1 = Split("-10000,2750,4250,3250,2750", ",") '数目必须大于等于N,有效的数字
t2 = Split("2008-1-1,2008-3-1,2008-10-30,2009-2-15,2009-4-1", ",") '数目必须大于等于N,有效的日期型
For i = 0 To N - 1
cells(i, 0) = t1(i): cells(i, 1) = t2(i)
Next
xirr cells, 0, 1, 0.1 '二维数组模拟excel的单元格,这里只要给cells赋值其它的不用管
MsgBox myvalue '得到的结果,可以用format函数来处理一下
End Sub
Function xirr(arr, a, b, c)
Dim o As Double, i As Double, j As Integer, flag As Integer, aa As Double, tt
For i = a To b Step c
For j = 0 To UBound(arr)
o = o + arr(j, 0) / (1 + i) ^ (Val(CDate(arr(j, 1)) - CDate(arr(0, 1))) / 365)
If i = a Then tt = o
Next
If Abs(o) < precision Then
myvalue = i
Exit Function
End If
If tt * o < 0 Then
xirr arr, aa, i, c / 10 '递归调用,每次范围、步进都缩小一个数量级,每提高一级精度只调用一次函数
End If
aa = i: tt = o
DoEvents
o = 0
Next
End Function
上一个:一份VB作业
下一个:关于vb的问题