公式行中的相对范围
Relative Range in the Row of a Formula
我已经为一个宏苦苦挣扎了一个多月了。目标是通过每次列中的值更改时插入一行来按安全标识符(在列 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, "A").Offset(0, 5)=RowCount
End If
我已经为一个宏苦苦挣扎了一个多月了。目标是通过每次列中的值更改时插入一行来按安全标识符(在列 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, "A").Offset(0, 5)=RowCount
End If