我正在使用VBA(r1c1格式)为Excel编写一个宏,我想引用一个始终位于E3位置的单元格。是否有我可以使用的语法将以r1c1格式进行绝对引用?或者有没有办法切换到A1并返回到r1c1?
我到处寻找,我找不到答案......提前谢谢。
答案 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列。
对于绝对值,您从左上角开始计算。因此E3
是R3C5
。即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将切换相对或绝对