chrisfang的Excel大全

单元格引用的简写和变形

2012-04-08
作者: chrisfang | 分类: Excel函数公式 | 阅读: 4,473 次浏览 | Tags:
声明: 本站文章均属原创,转载时请标明出处

以前发在EHblog的老博文,现在关闭了,准备陆陆续续搬迁一点过来。时间久了,有些文章也不一定保值了。

在Excel当中,单元格引用是一个很初级的问题,但也是和公式运算关系最密切的知识点之一。单元格引用从形式上来说包括A1引用和R1C1两种,从地址对象上来说又包含了绝对引用、相对引用以及两者结合的混合引用三种方式。上面两个概念已经很让人头晕了,但是要看明白下面的博文,你至少先要理解上述所提到的几个概念,因为下面博文所涉及的是比上述内容更复杂的与引用相关的元素——引用运算符,它包括【区域引用】、【联合引用】和【交叉引用】

————————————————以下原文发表于2009-9-17——————————————

 

单元格引用有A1和R1C1两种样式,两种形式中又包含了绝对引用和相对引用两种不同的变化。本帖不讨论绝对引用和相对引用的问题,而是着重讨论一下在单元格引用中结合三种引用运算符所进行的引用地址变形及简写方式。

单个区域的引用(同行、同列的简写)
先来讲一下R1C1方式的引用
对于G2:J2这样一个单元格区域,使用R1C1引用样式,可以写作:R2C7:R2C10,也可以写作:R2C10:R2C7。但R必须在C前面,“C10R2:C7R2”这样的写法是无效的。
对于这样同行的区域引用,可以使用简写的引用方式,即将R2C7:R2C10中的红色部分省去,简写为R2C7:C10。
如果对于同列的区域引用,例如G2:G10,则可以将R2C7:R10C7中的红色部分省去,简写为R2:R10C7。

为什么可以这样简写?为什么一个是将后面的R2省去而另一个是将前面的C7省去?这样的简写有何规律?在没有官方的解释之前,为了便于大家的理解和记忆,我给出一个我自己的解释思路,请看下面的“关于引用运算符”:

关于引用运算符
Excel中包含了3种引用运算符,用于表示对单元格的引用,
一种是冒号,称为区域运算符,这是最常见的,如=SUM(A2:B10),表示引用冒号两边单元格所围成的矩形区域;
一种是逗号,称为联合运算符,如=RANK(A1,(A1:A10,C1:C10)),表示同时引用逗号两边的两个区域;
还有一种是空格,称为交叉运算符,表示引用空格两边的两个区域的交集,如=SUM(A1:B5 A4:D9)即等价于=SUM(A4:B5)。这个交叉运算符也是我这里要重点讨论的一个使用技巧。

对于G2:J2这个单元格区域,如果换一个角度来看,可以看作是G:J这4列与第2行所构成的交叉区域。因此,如果用交叉运算符和R1C1样式来引用的话,可以写作:R2 C7:C10,中间用交叉运算符空格分隔,即表示R2与C7:C10这两个区域的交叉区域。
因此R2C7:R2C10等价于(R2 C7:C10),而这个形式与上面的简写形式R2C7:C10十分相似;
同理,G2:G10可以表示为R2C7:R10C7,等价于(R2:R10 C7),这个形式与其简写形式R2:R10C7也十分相似。

因此,同行或同列的区域引用简写原则可以看作是一次类似合并同类项以后消项的过程:
R2C7:R2C10=R2 C7:C10=R2C7:C10
R2C7:R10C7= R2:R10 C7=R2:R10C7

交叉运算符同样也可以应用在A1引用方式中:
例如(R2 C7:C10)如果使用A1引用方式,则可以写作:(2:2 G:J)
(R2:R10 C7)如果使用A1引用方式,则可以写作:(G:G 2:10)

多个区域的引用(合并同类项)
以同时引用G13:J13、G15:J15、G17:J17这三行区域为例,
使用R1C1的通常写法是:
R13C7:R13C10,R15C7:R15C10,R17C7:R17C10 其中的逗号表示联合运算
可以引入交叉运算符,简化为:
R13 C7:C10,R15 C7:C10,R17 C7:C10
此时,因为三个以逗号分隔的联合区域中,每个区域都与C7:C10有交叉部分,来做一个类似于合并同类项的变形,可以简化为:
(R13,R15,R17) C7:C10
将几个行号用逗号相连接表示联合运算,同时外面用括号包围以后,再与C7:C10区域使用空格进行连接,形成交叉运算关系,得到了我们所需要的三个行区域的同时引用。
类似的,使用A1引用样式也可以进行合并变形,上述区域的A1引用写法为:(13:13,15:15,17:17) G:J

上面三个区域是水平方向平行的三行,下面来看一下垂直方向平行的三列,实质用法完全一致:L13:L20、O13:O20、P13:P20
R1C1形式:
R13C12:R20C12,R13C14:R20C14,R13C16:R20C16
引入交叉运算符,简化为:
R13:R20 C12,R13:R20 C14,R13:R20 C16
合并同类项,简化为:
R13:R20 (C12,C14,C16)

A1引用样式为:(L:L,N:N,P:P) 13:20

地址引用的应用场合
对于A1样式的地址引用,可以直接使用在公式中,例如:

=SUM((13:13,15:15,17:17) G:J)

即表示同时对G13:J13、G15:J15、G17:J17三个区域进行求和。

对于R1C1引用样式,则通常用于INDIRECT函数的引用,对于INDIRECT参数中包含变量的情况,使用简写+变量参数的方式可以减少大量公式开销。具体案例待以后补充。
而对于使用INDIRECT+TEXT函数构造引用样式来进行地址引用的场合,也可以用的R1C1引用样式及其简写方式,但其中既包含联合又包含交叉的复杂情况不太多见。简单举个例子说明一下应用:
要对G:I三列中的某三个非相邻行进行引用,公式取得三个行号分别为aa、bb、cc,加权组合后可以得到aa0bb0cc一个8位数值,此时使用

=TEXT(aa0bb0cc,"(R0R000R00,0) C7!:C9")

就可以得到“(Raa,Rbb,Rcc) C7:C9”的INDIRECT引用参数。其中的TEXT函数格式代码中利用了千分位符来产生表示联合引用的逗号。

除了INDIRECT函数,HYPERLINK函数中也可以用到A1样式和R1C1样式的引用地址,例如

=HYPERLINK("#r13:r20 (c12,c14,c16)","链接")
即可产生同时链接到L13:L20、O13:O20、P13:P20三个区域的超级链接。本帖附件中也使用了HYPERLINK函数便于大家识别所引用的具体区域范围。

为了便于理解,可以结合下面这个附件,相信可以更容易明白一些:

微盘下载:http://vdisk.weibo.com/s/3Vl0w

本地下载:单元格引用 (1641)

发表评论

邮箱地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>