我有一个电子表格,其中包含我需要拆分使用的帐户列表,并使用 XIRR 函数来自动化处理它的过程。我在 C 列中有帐号,这就是我需要拆分每个部分的方式。我在 E 列中有日期,在 F 列中有现金流量。
到目前为止,我所拥有的是比较 C 列中的数据的代码,如果它们不同,则在它们之间放置一个空行。然后它检查空行,并将文本“IRR”放在 A 列中,然后我需要 XIRR 函数运行并在 K 列的该行上输出结果。数据是通过转到其中的行获得的IRR 在 A 列中,移动到 C 列,向上移动一个单元格,然后选择块中的所有内容,直到下一个空行,移动,对第二个数组执行相同的操作,然后将它们放入 XIRR 函数中。
我将代码放入新标题中,将 IRR 添加到最后一行,因为它不是自动完成的,然后删除添加到第二行的“IRR”,因为顶行与标题不同。我的问题来自我不断遇到的两个错误。它一直说 dateArray 的类型 13 不匹配。这是因为我被困在第二行,它试图从标题中获取数据,或者如果它通过了那里,那么它会说同样的话。
这就是我所拥有的;
Sub XirrCalc()
Dim lRow As Long
Dim DatesArray() As Date
Dim CashflowArray() As Double
Dim i As Integer
Range("A1").Select
ActiveCell.Offset(0, 11).Value = "IRR %"
Range("A1").Select
Selection.End(xlToRight).Select
Selection.Offset(0, -1).Select
Selection.Copy
Selection.Offset(0, 1).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
Selection.End(xlDown).Select
Selection.Offset(1, 0).Select
Selection.Value = "IRR"
Selection.Offset(-1, 0).Select
Selection.Copy
Selection.Offset(1, 0).Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A1").Select
For lRow = Cells(Cells.Rows.Count, "C").End(xlUp).Row To 2 Step -1
If Cells(lRow, "C") <> Cells(lRow - 1, "C") Then Rows(lRow).EntireRow.Insert
If Cells(lRow, "A").Value = "" Then Cells(lRow, "A").Value = "IRR"
Next lRow
Range("A1").Select
ActiveCell.Offset(1, 0).Select
Selection.ClearContents
If Cells(lRow, "A").Value = "IRR" Then Cells(lRow, "A").Offset(-1, 4).Select
Range(Selection, Selection.End(xlUp)).Select
i = Selection.Rows.Count
ReDim DatesArray(i)
ReDim CashflowArray(i)
DatesArray = Selection.CurrentRegion.Value
Selection.Offset(0, 1).Select
Range(Selection, Selection.End(xlUp)).Select
CashflowArray = Selection.CurrentRegion.Value
Selection.Offset(1, 6).Select
ActiveCell.Value = Application.XIRR(CashflowArray, DatesArray)
End Sub
这不是最干净的方法,我相信它可以做得更好,所以任何帮助表示赞赏。