0

我有一个电子表格,其中包含我需要拆分使用的帐户列表,并使用 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

这不是最干净的方法,我相信它可以做得更好,所以任何帮助表示赞赏。

4

0 回答 0