公式行中的相对范围

问题描述

一个多月以来,我一直在为一个宏而苦苦挣扎。目标是通过每次列中的值更改时插入一行,按安全标识符(在 C 列中)拆分数据。之后,我想在插入的空白行中插入一个 XIRR 公式。问题是每个证券都有不同数量的行,我无法在 XIRR 公式中使行数变得动态。这是我已经能够放在一起的代码

 Dim lRow As Long

 Dim kRow As Long

 Dim RowCount As Integer
 
 
 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
  
  
 For kRow = Cells(Cells.Rows.Count,"A").End(xlUp).Row To 2 Step -1

 RowCount = Range(Selection,Selection.End(xlUp)).Count - 1
 
 If Cells(kRow,"A").Value = "IRR" Then Cells(kRow,"A").Offset(0,5).Select

 Selection.Value = RowCount

 ActiveCell.FormulaR1C1 = "=XIRR(R[-RowCount]C[0]:R[-1]C[0],R[-RowCount]C[-1]:R[-1]C[-1])"


 Next kRow

我知道 RowCount 变量正在计算正确的行数,但 XIRR 公式不接受该变量作为行计数的输入。无论我尝试使公式动态化多少次不同的迭代,我每次都会在宏的这一步休息一下。有人可以帮助理解我做错了什么吗?

谢谢!

解决方法

正如@BigBen 在评论中所述,您需要将 rowCount 变量构建到公式的字符串中。

ActiveCell.FormulaR1C1 = "=XIRR(R[-RowCount]C[0]:R[-1]C[0],R[-RowCount]C[-1]:R[-1]C[-1])"

变成

ActiveCell.FormulaR1C1 = "=XIRR(R[-" & RowCount & "]C[0]:R[-1]C[0],R[-" & RowCount & "]C[-1]:R[-1]C[-1])"

如果不是绝对需要,请跳过选择步骤:

If Cells(kRow,"A").Value = "IRR" Then 
    Cells(kRow,"A").Offset(0,5).FormulaR1C1 = "=XIRR(R[-RowCount]C[0]:R[-1]C[0],R[-RowCount]C[-1]:R[-1]C[-1])"
Else 
    Cells(kRow,5)=RowCount
End If