如何在VBA for Excel中使用r1c1格式进行绝对引用?

时间:2014-02-24 01:36:51

标签: excel vba excel-vba

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

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

4 个答案:

答案 0 :(得分:20)

如果我将=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列。

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

答案 1 :(得分:3)

有时,'Application.ConvertFormula'函数对于在引用样式之间进行转换非常有用。例如,将其添加到即时窗口:

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

返回了这个:

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

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

此外,通过以下方式在VBA中切换参考样式:

application.ReferenceStyle = xlA1

application.ReferenceStyle = xlR1C1

答案 2 :(得分:0)

R1C1格式既可用于绝对参考,也可用于相对参考。 没有括号的R1C1是绝对的,当你使用括号时它是相对的。

无论您在何处使用,

R3C5始终指向E3。 如您所知,R[3]C[5]始终指向当前位置的3向下和5。

正如George Dooling在其中一篇评论中所说,R-3C-5没有意义的原因是因为你不在表格之内。工作表从R1C1开始,数字只会增加。

关于你的第二个问题,你可以用引号括起来使用A1格式。 R3C5 "E3"可以在FormulaR1C1内写成public function login_function() { $this->load->database(); // Load the model $this->load->model('login_model'); // Load the method of model $records = $this->login_model->can_login(); // Return the data in view if ($records === false) { $this->session->set_flashdata("message", "invalid user"); redirect('Main_controller', 'refresh'); } else { $this->session->set_userdata('id', $records['id']); $data['f'] = $records; $this->load->view('user-home', $data); } } 而不会出现问题。

答案 3 :(得分:-2)

R3C5

没有括号=绝对

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