格集
在实际应用中,往往需要对一组单元格进行运算,而不是单个单元格。这些单元格有可能是固定格,也有可能是主动扩展、被动复制格,为了能在表达式中描述确定的一组单元格,我们引入格集的概念。
格集可以看为满足某种条件的一组单元格的集合。特别的,单个单元格也可以视为仅含一个单元格的格集。 为了说明格集的概念及其作用,我们看看下面的表格:
例6-1:
填入数据:
如果我们要进行如下统计:①Tom买牛奶的日期;②Tom买毯子的金额;③Jerry在2005-2-1买的商品;④所有买牛奶的金额。 在做这些统计时,涉及到的数据都是发生在一系列格子中的,我们分别来看一下:①c2,c3;②d4,d5;③d9,d11;④d2,d3,d6,d7,d8。
固定格的格集表示法
对于固定的单元格,我们可以用list()函数,:(link)操作符来表示,书写规则如下: List(Cell1, Cell2, Cell3,……Celln) 表示由Cell1, Cell2, Cell3,……Celln组成的格子的集合 Cellx : Celly
其中Cellx与Celly均为单元格,该表达式表示以Cellx与Celly为对角点圈起的矩形区域,而且,Cellx在左上角,Celly在右下角。
提示:Link操作符返回的结果是一个格集,可以对其应用集合函数,如count()、sum()、max()、min()等,但是包含link操作符的单元格不允许设为扩展格。
举例:
List(A1,B3,C4) 表示由A1,B3,C4三个单元格组成的集合
Sum(A1:B3) 表示对以A1与B3为对角点圈起的矩形区域里的格子求和。
扩展格的格集表示法
对于扩展格的格集表示,我们一般和层次坐标结合起来,由层次坐标来界定一个范围,在这个范围内的所有单元格的集合,其书写规则如下:
Cellx[层次坐标或者位移坐标]{}
说明:从上述书写规则可以看出,格集相当于在层次坐标或者位移坐标的基础上增加了{},即可表示该层次坐标或者位移坐标界定的范围内的所有单元格。前文已经提到,如果没有{},而层次坐标界定的范围内的单元格不止一个,那么该层次坐标返回的是该范围内的第一个单元格,有了{},就返回该范围内单元格的集合。
例3.5.2-1:
根据上述表格,我们写几个格集并分析其结果由哪些单元格组成。
C2[`0]{} 返回扩展后的c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12
C2[A2:2]{} 返回扩展后的c7,c8,c9,c10,c11,c12 D2[A2:1,B2:2]{} 返回扩展后的d4,d5,d6
D2[A2:1,B2:2]{} 返回扩展后的d4,d5,d6
同样的,为了简化格集的表示,很多时候会有缺省的写法,其缺省的规则和层次坐标、位移坐标完全一样,主要也是为了简化其中的层次坐标、位移坐标的写法,即目标单元格和当前格的主格相同时,层次坐标(位移坐标)中的该主格可以省略,如果所有主格都相同,则层次坐标(位移坐标)可以为空,甚至连中括号都可以省略。
其书写规则为: Cellx[缺省的层次坐标或者位移坐标]{}
如果层次坐标(位移坐标)完全省略,则缺省的写法为: Cellx[]{}或Cellx{}
例:3.5.3-1
例:3.5.3-2
如前文所述,当需要对一组单元格进行操作时,我们引入了格集表示法,但是格集的表示是和层次坐标、位移坐标紧密相关的,即层次坐标或者位移坐标确定的范围内的单元格的集合,缺省情况下则是当前格所属的主格管辖范围内所有目标单元格的集合。
但是,很多时候,我们需要运算的目标不是层次坐标确定的所有单元格集合,而是该范围内满足某种条件的单元格集合,此时我们引入了条件表达式,其书写规则如下:
Cellx[层次坐标或者位移坐标]{条件表达式}
从上面的表达式可以看出,其含义是对层次坐标或者位移坐标界定的单元格集合再运用条件表达式进行过滤,把符合条件的单元格找出来,并返回。
例3.5.4-1:
请看下面的表格:
可以看出,设计器中只有一行的表达式单元格,但是扩展后变成了很多的行。而该表格中的难点是计算比去年同期,也就是说,对于2006年7月份的格子来说,需要和2005年7月份的数据进行对比运算,而2006年4月份的格子需要和2005年4月份的格子进行对比运算。
而这个表格中的月份不是连续的,而且不是按顺序排列,因此仅仅靠层次坐标、位移坐标无法定位到去年同月份的单元格,需要借助条件表达式。
此时我们往d2单元格中写入表达式:C2-C2[A2:-1]{当前格的b2主格值==目标格的b2主格值}
这时我们会发现,条件表达式没法写了,当前格的主格是b2,目标格的主格也是b2,如果我们写成b2=b2,显然搞不清谁是谁的,于是我们引入了$运算符,他在格集条件表达式中指代当前格的主格
例如上面的条件表达式我们可以写成:C2-C2[A2:-1]{$B2==B2},其中$B2指代当前格的B2主格,B2指代目标格的B2主格
总结:$运算符的书写规则如下: $Cellx 其含义是在格集表达式中指代当前格的Cellx主格