【问题标题】:How to I make an absolute reference using r1c1 format in VBA for Excel?如何在 VBA for Excel 中使用 r1c1 格式进行绝对引用?
【发布时间】:2018-03-20 00:17:43
【问题描述】:

我正在使用 VBA(r1c1 格式)为 Excel 编写一个宏,并且我想引用一个始终位于 E3 位置的单元格。有没有我可以使用的语法以 r1c1 格式进行绝对引用?或者有没有办法切换到 A1 并返回到 r1c1?

我到处寻找,但找不到答案...提前谢谢。

【问题讨论】:

  • 如果我没记错的话,你把数字放在括号里。例如,R[1]C[2] 等价于 B2,即第 1 行第 2 列。

标签: vba excel


【解决方案1】:

如果我将=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 会认为您正在从无效的单元格引用中减去一个数字。

编辑:值得一提的是,引用在绝对与相对时的处理方式不同。

  • 对于相对引用,您从公式所在的单元格开始计数。E3R[-2]C[-2] 远离 G5。即向上 2 行,向左 2 列。

  • 对于绝对值,您从左上角开始计数。所以E3R3C5。即向下 3 行,超过 5 列。 (感谢@GeorgeDooling 的澄清)

【讨论】:

  • 小澄清。您不是从 A1 开始计数,而是从表格中计数,有点像 0,0。因此,R1C1 将从该 0,0 点下降一个和一个以上,最终位于第 1 行第 1 列 (A)。括号中的数字表示“从我当前的位置移动这个数量的地方”。没有括号的数字表示“使用这个确切的位置”。这就是为什么你不能有 R0C0 或 R-1C-1 等。Excel 中没有位置是行/列零或负位置。
  • @GeorgeDooling 非常感谢 - 我显然没有正确解释。
【解决方案2】:

有时“Application.ConvertFormula”函数对于在参考样式之间切换很有用。例如,将其添加到即时窗口:

debug.print application.ConvertFormula("=PRODUCT(O7,P$7)",xla1,xlr1c1)

返回这个:

=PRODUCT(RC[-5],R7C[-4])

这是一个微不足道的例子,但是当你手上有一个怪物公式时......

另外,在 VBA 中的参考样式之间切换是通过以下方式完成的:

application.ReferenceStyle = xlA1

application.ReferenceStyle = xlR1C1

【讨论】:

    【解决方案3】:

    R3C5

    无括号 = 绝对

    编辑公式时在单元格窗口中按 f4 将切换相对或绝对

    【讨论】:

    • R3C5 是绝对参考!相对的一个是 r[-2]c[6]
    • +1 表示 F4。 F2 -> F4 切换相对/绝对地址真的是一个不错的功能!
    【解决方案4】:

    R1C1 格式可用于绝对引用和相对引用。 不带括号的R1C1是绝对的,带括号的则是相对的。

    R3C5 始终指向E3,无论您在哪里使用它。 如您所知,R[3]C[5] 始终指向您当前位置的下方 3 和右侧 5。

    正如 George Dooling 在其中一个 cmets 中所说的那样,R-3C-5 毫无意义的原因是因为您不在工作表中。表格从R1C1 开始,数字只会上升。

    关于第二个问题,您可以使用 A1 格式,用引号将其括起来。 R3C5 可以写成"E3"FormulaR1C1 没有问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-20
      • 2013-08-04
      • 1970-01-01
      相关资源
      最近更新 更多