此公式有效:
ActiveCell.FormulaR1C1 = "=SUM(R[-14]C:R[-1]C)"
它返回=sum(c1:c14)
此公式无效:
ActiveCell.FormulaR1C1 = "=SUM(R[-" & nrows & "]C:R[-1]C)"
它返回=SUM(C14:C1048576)
我有这句话
Dim nrows as Integer
为什么带有nrows变量的公式不起作用
答案 0 :(得分:3)
您的“错误”结果是因为R1C1公式将“自动换行”,因此例如,如果您的活动单元格为A1并输入=R[-1]C
,您将获得=A1048576
(ColA中的最后一个单元格)作为结果。
类似地,A1中的=RC[-1]
会给您=XFD1
答案 1 :(得分:1)
在实现R1C1样式公式时,应格外小心,除非有人使用Macro Recorder直接记录它们。
样式为:<Row><Number><Column><Number>
第一部分是参考类型。
绝对引用::在绝对引用的情况下,符号不包含方括号,并且所写的数字表示单元格在网格中的明确位置。 例如
R1C1
表示$A$1
,即第1行和第1列
R2C1
表示$A$2
R1C2
表示$B$1
使用绝对引用非常简单,因为可以很快地了解网格中单元的位置。
相对参考:如果是相对参考,则符号需要使用方括号。请参见下图,以清楚地了解偏移量表示法。
因此,如果您当前的单元格是B2
,那么公式
=R[-1]C
将引用B1
=RC[-1]
将引用A2
,依此类推,如图所示。
您的具体情况:
您可以使用
ActiveCell.FormulaR1C1 = "=SUM(R1C:R" & (nrows - 1) & "C)"
这基本上意味着,如果您的ActiveCell
是C16
并且变量nrows
是16
,那么您将获得以下公式,该公式对行使用绝对引用技术。
=SUM(C$1:C$15)
,即混合引用。
有关相对参考,您可以使用:
ActiveCell.FormulaR1C1 = "=SUM(R[" & -(nrows - 1) & "]C:R[-1]C)"
将获得
=SUM(C1:C15)
,即相对引用
对于绝对引用,假设您希望在C列中使用,则将变为:
ActiveCell.FormulaR1C1 = "=SUM(R1C3:R" & (nrows - 1) & "C3)"
将获得
=SUM($C$1:$C$15)
,即绝对引用
其他说明:
符号=RC
指ActiveCell本身。
相对样式引用被包装,即A列中的=RC[-1]
指向工作表中的最后一列,类似地,第一行中的=R[-1]C
则指向工作表中的最后一行。