单元格公式中的VBA动态单元格引用

时间:2016-05-03 19:52:07

标签: vba dynamic

我正在尝试将此公式“= RIGHT(G7,LEN(G7)-LEN(OFFSET(H7,0,-7)))”转换为VBA,无论它引用单元格H7,我希望它使用ActiveCell相反,因为此公式在循环中使用,并且每次都输入到不同的行中。希望我清楚地解释我的困境。

我转换公式的尝试以:

结束
  

ActiveCell.Formula =“= right(offset(”& ActiveCell&   “,0,-1),len(偏移(”& ActiveCell&“,0,-1)-len(偏移量(”& ActiveCell“)   &安培; “0,-7))”

给出了运行时错误“1004”:应用程序定义或对象定义错误。

1 个答案:

答案 0 :(得分:0)

这是FormulaR1C1的用途:

Sub foooo()

Dim ws As Worksheet
Set ws = ActiveSheet
ws.Range("H1:H100").FormulaR1C1 = "=RIGHT(RC-1,LEN(RC-1)-LEN(RC-7))"

End Sub

它会立即完成整个范围。

如果你真的想循环那么:

Sub foooo()
Dim i As Long
Dim ws As Worksheet
Set ws = ActiveSheet
For i = 1 To 100
    ws.Cells(i, "H").FormulaR1C1 = "=RIGHT(RC-1,LEN(RC-1)-LEN(RC-7))"
Next i
End Sub

公式的问题在于范围对象的默认特征是其值而不是其地址。这样:

ActiveCell.Formula = "=right(offset(" & ActiveCell.Address(0,0) & ",0,-1),len(offset(" & ActiveCell.Address(0,0) & ",0,-1)-len(offset(" & ActiveCell.Address(0,0) & ",0,-7))"

虽然我会避免使用完整的OFFSET函数。 OFFSET是一个易失性函数,它计算每次excel计算时,无论它引用的任何数据是否发生了变化。充满这些的列将减慢计算时间。