【发布时间】:2018-03-20 00:17:43
【问题描述】:
我正在使用 VBA(r1c1 格式)为 Excel 编写一个宏,并且我想引用一个始终位于 E3 位置的单元格。有没有我可以使用的语法以 r1c1 格式进行绝对引用?或者有没有办法切换到 A1 并返回到 r1c1?
我到处寻找,但找不到答案...提前谢谢。
【问题讨论】:
-
如果我没记错的话,你把数字放在括号里。例如,R[1]C[2] 等价于 B2,即第 1 行第 2 列。
我正在使用 VBA(r1c1 格式)为 Excel 编写一个宏,并且我想引用一个始终位于 E3 位置的单元格。有没有我可以使用的语法以 r1c1 格式进行绝对引用?或者有没有办法切换到 A1 并返回到 r1c1?
我到处寻找,但找不到答案...提前谢谢。
【问题讨论】:
如果我将=E3 粘贴到G5 和=$E$3 粘贴到G6,然后启动一个 VB 窗口并在即时窗口中执行以下操作:
? ActiveSheet.Range("G5").Formula
=E3
? ActiveSheet.Range("G5").FormulaR1C1
=R[-2]C[-2]
? ActiveSheet.Range("G6").Formula
=$E$3
? ActiveSheet.Range("G6").FormulaR1C1
=R3C5
所以 R 和 C 使其相对于当前单元格。当数字为负数时,您需要使用方括号,否则 Excel 会认为您正在从无效的单元格引用中减去一个数字。
编辑:值得一提的是,引用在绝对与相对时的处理方式不同。
对于相对引用,您从公式所在的单元格开始计数。E3 是 R[-2]C[-2] 远离 G5。即向上 2 行,向左 2 列。
对于绝对值,您从左上角开始计数。所以E3 是R3C5。即向下 3 行,超过 5 列。 (感谢@GeorgeDooling 的澄清)
【讨论】:
有时“Application.ConvertFormula”函数对于在参考样式之间切换很有用。例如,将其添加到即时窗口:
debug.print application.ConvertFormula("=PRODUCT(O7,P$7)",xla1,xlr1c1)
返回这个:
=PRODUCT(RC[-5],R7C[-4])
这是一个微不足道的例子,但是当你手上有一个怪物公式时......
另外,在 VBA 中的参考样式之间切换是通过以下方式完成的:
application.ReferenceStyle = xlA1
或
application.ReferenceStyle = xlR1C1
【讨论】:
R3C5
无括号 = 绝对
编辑公式时在单元格窗口中按 f4 将切换相对或绝对
【讨论】:
R1C1 格式可用于绝对引用和相对引用。 不带括号的R1C1是绝对的,带括号的则是相对的。
R3C5 始终指向E3,无论您在哪里使用它。
如您所知,R[3]C[5] 始终指向您当前位置的下方 3 和右侧 5。
正如 George Dooling 在其中一个 cmets 中所说的那样,R-3C-5 毫无意义的原因是因为您不在工作表中。表格从R1C1 开始,数字只会上升。
关于第二个问题,您可以使用 A1 格式,用引号将其括起来。 R3C5 可以写成"E3" 内FormulaR1C1 没有问题。
【讨论】: