VBA中R1C1引用格式下Mapper!C[-13]:C[2]含义咨询
搞懂VBA中R1C1引用的
Mapper!C[-13]:C[2] 嘿,刚接触VBA10天就能尝试动态单元格的逻辑,已经超棒啦!我来给你把这个看起来有点绕的引用拆解明白:
先搞懂R1C1引用规则
我们平时常用的是A1引用(比如A1、B3这种),而R1C1是另一种相对引用规则:
R代表行(Row),C代表列(Column)- 方括号里的数字是相对于当前公式所在单元格的偏移量:
- 正数表示向下/向右偏移
- 负数表示向上/向左偏移
- 如果没写方括号,就是绝对引用(比如
R1C1就是固定的第1行第1列)
拆解Mapper!C[-13]:C[2]
我们把这段拆成三部分看:
Mapper!:这部分很简单,就是指定引用的是名为Mapper的工作表,和A1引用里的Mapper!A1是一个意思。C[-13]:这里只写了C没写R,表示引用的是一整列,[-13]是列偏移:相对于当前写公式的单元格,向左数13列的那一整列
比如如果你的公式写在当前工作表的第14列(N列),那C[-13]就对应第1列(A列)。C[2]:同样是一整列,[2]是列偏移:相对于当前写公式的单元格,向右数2列的那一整列
还是刚才的例子,公式在N列(14列),C[2]就对应第16列(P列)。
所以合起来,Mapper!C[-13]:C[2]就是:Mapper工作表中,从当前公式单元格左13列到右2列的所有连续列组成的区域(对应A1引用里的Mapper!A:P,如果公式在N列的话)。
结合VLookup的场景
因为你是用这个作为VLookup的查找区域,那VLookup的逻辑是:
- 查找值会在这个区域的第一列(也就是
C[-13]对应的列)里搜索 - 找到匹配项后,返回区域中指定列的对应值(VLookup的第三个参数就是区域内的列序号)
比如如果VLookup写的是Application.VLookup(查找值, Range("Mapper!C[-13]:C[2]"), 5, False),那就是在C[-13]列找匹配,返回区域里第5列(也就是C[-13+4] = C[-9])的值。
额外小提示
R1C1引用在VBA里特别好用,因为它的相对偏移是动态的——如果你把公式复制到其他单元格,偏移量会自动跟着调整,不用像A1引用那样手动加$来固定/放开引用,很适合写批量动态计算的代码~
内容的提问来源于stack exchange,提问作者Sandeep Thomas
相关产品推荐
相关产品推荐

