Excel 能否对数据隔行求和?

图7.110中A1:F21区域包含了10个业务员在4个季度中的销量和退货数量,现要求计算所有人员的销量总和及退货量总和。

图7.110 销量与退货表

解题步骤

本例中数据的规律是:所有销量存放在偶数行,所有退货存放在奇数行。因此使用IF+MOD组合区分奇数行与偶数行,再用SUM函数求和即可,操作步骤如下。

1.在I1单元格输入以下公式:

2.在I2单元格输入以下公式:

以上两个公式都是数组公式,必须输入公式后按组合键<Ctrl+Shift+Enter>结束,否则无法得到正确结果。图7.111是以上两个公式的计算结果,偶数行的数据汇总后等于43623,奇数行的数据汇总结果为3293。

图7.111 统计总销量和退货数量

知识扩展

1.MOD函数用于计算一个数值除以另一个数值后的余数,当除数是2时,它用于判断被除数是奇数还是偶数。MOD函数的语法如下:

其中第一参数是被除数,第二参数是除数,计算结果是余数。

=MOD(154,3)——154/3的商为51,余数为1,因此公式的结果为1;

=MOD(154,2)——154/2的商为77,余数为0,因此公式的结果为0;

=IF(MOD(A1,2)=0,"偶数","奇数")——当A1是偶数时,它除以2的余数为0,那么此时公式的计算结果为“偶数”,否则计算结果为“奇数”。

如果MOD的第一参数包含多个值,那么公式的计算结果也包含多个值。

2.公式“=SUM(IF(MOD(ROW(C2:F21),2)=0,C2:F21))”的含义是:如果C2:F21区域中某个单元格的行号是偶数,那么对这个单元格的值汇总。

3.假设要对偶数列的数据求和,那么将公式中的ROW函数替换成COLUMN函数即可。

Excel 能否对合并的单元格编号?

图7.105中A列的姓名处于合并单元格中,能否在A列前面插入一列,然后采用与姓名列相同的合并方式,并在合并单元格中按姓名编号?

图7.105 成绩表

解题步骤

合并单元格无法填充公式,因此只能选中所有合并单元格,然后一次性输入公式。编写公式有很多种思路,本例展示MAX函数实现需求的思路,步骤如下。

1.选择B列并单击右键,从右键菜单中选择“插入”。

2.将B列复制到A列,然后删除A列的值,此时A列的合并单元格与B列的合并方式完全一致,效果如图7.106所示。

3.在A1中输入“编号”。

4.选择A2:A14,然后输入以下公式:

输入公式后必须按组合键<Ctrl+Enter>结束,公式产生的编号如图7.107所示。

图7.106 插入空列并按B列的方式合并

图7.107 在合并单元格生成编号

知识扩展

1.MAX函数用于计算一个或多个区域的最大值,它有1~255个参数,其中第1个参数必须输入,第2~255个参数是可选参数,可以忽略不写。函数的具体语法如下:

其中第2~255个参数可以忽略。

MAX函数提取最大值时会所略文本,但无法忽略错误值。在图7.108中,A2单元格是文本,公式“=MAX(A1:A3)”可以忽略A2的值,从其他单元格中提取最大值10。假设A2单元格中有公式“=0/0”,那么公式“=MAX(A1:A3)”也只能得到错误值#DIV/0!。

图7.108 使用MAX函数提取区域中的最大值

2.本例公式“=MAX($A$1:A1)+1”中MAX函数的参数使用“$A$1:A1”,它代表A列第一行到公式所在行的上一行之间的区域,当公式在A2时计算A1的最大值,公式在A5时计算A1:A4的最大值,公式在A9时计算A1:A8的最大值。

当公式在A2时,由于A1单元格只有文本,表达式“MAX($A$1:A1)”的计算结果是0,因此在MAX后加1从而使公式产生编号1;当公式在A5时,MAX函数从A1:A4中提取到的最大值是1,此时加1后将得到2…因此公式从上向下会依次产生1、2、3这类递增的序号。

3.本例的公式其实是以A1作为辅助单元格来实现需求的,假设没有标题行,公式要从A1开始书写,那么由于没有了辅助单元格,本例公式也就不再适用。

如果不用辅助单元格,可以改用图7.109中的公式来完成。

图7.109 使用COUNTA函数生成编号

COUNTA函数用于计算非空单元格的数量,参数“$B$1:B1”锁定了起始单元格,终止单元格由公式所在行决定,因此COUNTA函数的计算结果也从1开始相应地递增,从而产生升序的编号。

4.本例还可以将公式替换为“=COUNT($A$1:A1)+1”,同样用A1作为辅助单元格的思路达成需求。

Excel 如何统计周六的平均产量与其他时间产量的差值?

图7.103是7月份的日产量表,由于领导怀疑周六职工的情绪会影响产量,现要求制表人员用每周六的产量平均值与其他时间的平均值比较,查看本月周六的平均值比其他时间的平均值低多少。

图7.103 本月产量表

解题步骤

数据源中只有日期,而且未标示每一个日期属于周几,因此需要使用TEXT函数计算每一天属于周几,然后使用IF函数搭配AVERAGE函数分别计算两者的平均值,最后两者相减即可,具体步骤如下。

1.在D1中输入文本“差值”。

2.在C2中输入以下公式:

输入公式后按组合键<Ctrl+Shift+Enter>结束,结果为-40.3241,表明周六的平均产量比其他时间的平均产量低40左右,效果如图7.104所示。

图7.104 计算周六和其他时间的产量差值

知识扩展

1.TEXT 函数属于格式化函数,能将一种格式的数字转换成另一种格式的数字,当 TEXT函数的第二参数是“AAA”时,表示将日期转换成简化的星期格式。例如,2015年10月1日是星期四,那么公式“=TEXT("2015/10/1","AAA")”的计算结果就是“四”。如果将第二参数修改为“AAAA”,公式的计算结果就是完整的星期——会显示为“星期四”。

对于英文版本的系统,使用“AAA”或“AAAA”都不生效,英文版Excel只能使用“DDD”或“DDDD”作为TEXT函数的参数,它们用于获取英文的星期。

=TEXT("2016-2-28","DDDD")——计算结果为“Sunday”,如果将“DDDD”修改为“AAAA”则会得到“星期日”。

2.“=AVERAGE(IF(TEXT(A2:A32,"AAA")="六",B2:B32))”的含义是如果 A2:A32 的日期属于星期六,那么用B2:B32区域中对应的单元格参与求平均。本例中A5、A12、A19和A26的日期是星期六,因此实际参与求平均的值位于B2、B12、B9和B26单元格中,平均值为817.75。

相应地,表达式“AVERAGE(IF(TEXT(A2:A32,"AAA")<>"六",B2:B32))”表示A2:A32区域中不等于星期六时,使用C列中对应的单元格参与求平均,其平均值为858.074074074074。

3.本例属于数组公式,必须按<Ctrl+Shift+Enter>组合键的方式输入公式才能取得正确结果。

4.本例的公式不需要向任何方向填充,因此公式中的一切引用既可以使用相对引用也可以使用绝对引用。

Excel 如何计算不重复值的个数?

图 7.99 中,C 列是生产车间今日正在生产的所有型体名称,部分型体在多台机上生产,因此型体名称存在重复值。现要求计算今日同时在生产的型体名称有多少个。

图7.99 生产表

解题步骤

计算一列中的数据个数(忽略重复值)有很多方法,可以使用删除重复项工具去除重复值,或使用高级筛选提取唯一值,然后计算去重后的唯一值数据个数,也可以使用公式计算一列中的不重复数据个数。使用公式达成需求的优点在于数据源变化时计算结果也相应地变化,其他方法则必须在数据源更新后重新操作一遍。

计算唯一值数据个数的公式如下,效果见图7.100。

图7.100 使用公式计算唯一值数量

知识扩展

1.COUNTIF函数的功能是计算符合条件的单元格数量,第一参数是计算目标,第二参数是条件。当第二参数包含多个条件时函数的计算结果也会有多个。

在本例中,COUNTIF 函数的第二参数是 C2:C13,包含 12 个值,因此表达式“COUNTIF(C2:C13,C2:C13)”会产生12个计算结果,对应12个字符串的出现次数。

图 7.101 中,A1:C12 包含 12 个产品的名称,选择 B1:B12 后输入公 式“=COUNTIF(A1:A12,A1:A12)”并按组合键<Ctrl+Shift+Enter>结束,公式结果包含2、1、2、1、2、1、2、1、1、2、1、2等12个结果,其中1代表此单元格的值仅在A1:A12区域中出现一次,2则代表出现过两次,如A1和A7都有压线钳,因此B1和B7的值为2。

图7.101 统计每个单元格的值的出现次数

2.“COUNTIF(C2:C13,C2:C13))”用于计 算每个单 元格值的 出现次数,而“=SUMPRODUCT(1/COUNTIF(C2:C13,C2:C13))”则用于计算C2:C13区域的唯一值数量。某个数据的出现次数是几,“COUNTIF(C2:C13,C2:C13))”的计算结果中就会有几个几。例如,某单元格的值出现了3次,那么“COUNTIF(C2:C13,C2:C13))”的计算结果中就会有3个3,再如,某单元格的值出现了5次,那么“COUNTIF(C2:C13,C2:C13))”的计算结果中就会有5个5……基于此规律,将它的倒数求和,得到的结果就刚好是不重复值的数量。

举一个简单的例子,A列有1个1、2个2、4个4,在B1中输入公式“=1/a1”从而计算其倒数(见图7.102),将公式向下填充后可以得到1个一分之一、2个二分之一和4个四分之一,使用SUM函数将它们求和后的结果为3,而A列的不重复数据个数也刚好等于3,这印证了求倒数后再汇总可以得到不重复数据个数的思路是正确的。

图7.102 对倒数求和

3.SUMPRODUCT 函数在本例中用于替换 SUM 函数,本例使用 SUM 和 SUMPRODUCT函数求和都能得到正确结果,但是使用 SUM 时必须按组合键<Ctrl+Shift+Enter>,而使用SUMPRODUCT不需要按此三键,相比而言更方便。

Excel 能否将公式名称化?

能否简化过长的公式,使其便于书写,同时又便于识别?

例如,在图7.93~图7.95所示的案例中,需要在F列根据内销单价和出口单价计算产值,其公式如下:

I1和I2需要根据生产表的产量按出口和内销分别统计产值,两公式如下:

第二个和第三个公式本身比较简短,也比较好理解,因此不需要简化,第一个公式则需要简化。

图7.93 内销单价表

图7.94 外销单价表

图7.95 生产表

解题步骤

将公式转换成名称,或者将公式中的部分表达式转换成名称有利于简化公式及理解公式,本例中计算产值的公式较长,可通过以下步骤转换成名称。

1.选择F2单元格,然后按下组合键<Ctrl+F3>,弹出“名称”对话框。

2.单击“新建”按钮,弹出“新建名称”对话框,然后将名称设置为“良品数”,将引用位置设置为公式“=C2-D2”,设置界面如图7.96所示。

3.单击“确定”按钮关闭对话框,然后再次新建一个名称“单价”的对话框,并将引用位置设置为以下公式,设置界面如图7.97所示。

图7.96 定义名称“良品数”

图7.97 定义名称“单价”

4.单击“确定”按钮关闭对话框。返回工作表界面后在F2中输入以下公式:

=良品数*单价

5.双击F2单元格,将公式向下填充到F18,计算结果如图7.98所示。

图7.98 使用名称简化公式

知识扩展

1.通过名称简化后的公式计算结果和未使用名称的公式计算结果一致,但单元格中的公式更简短,而且便于阅读理解。通常情况下制表者对函数的认识深入一些,查看报表者却可能完全不懂函数,公式名称化之后则比较容易理解公式的计算过程。

2.定义名称时,如果名称中存在引用,则要区分相对引用还是绝对引用。

在名称中使用相对引用时,定义名称前选择哪一个单元格就显得格外重要了。本例中选择F2后再定义名称,且名称中的引用都是相对引用,因此该名称只适合在F2单元格中调用。如果选中F2以外的任意单元格后定义名称,F2中的公式都会得到错误结果。

简单而言,要在哪个单元格输入公式,就要先选中哪个单元格,然后再定义名称。如果名称中的引用是绝对引用则例外。

3.在公式中调用名称时,千万不能在名称前后使用双引号。

Excel 能否提取单元格中位于左边的所有数字?

图7.85中的C列包含了数值和单位,现要求在E列提取其数字,忽略单位,是否有办法一次性提取成功?

解题步骤

提取左边的数字有多种方法,每种方法各有所长。使用基础操作可以完成,使用公式也可以完成,其中公式又分多种思路。本例讲述Lookup+Left组合的思路,具体操作步骤如下:

1.选择E2,然后输入以下公式:

2.双击E2的公式,使其自动填充到E11单元格,此时计算结果如图7.86所示。

图7.86 提取每个单元格左边的数字

知识扩展

1.ROW函数用于计算单元格的行号,它的参数必须是单元格。

=ROW(G1)——结果为1,G1单元格的行号为1;

=ROW(C65536)——结果为65536;

=ROW(G1:D3)——当以普通公式的形式输入公式时,它的结果为1;当以数组公式的形式输入公式时,它的结果为{1,2,3},即选择纵向3个连续的单元格后输入公式,并按<Ctrl+Shift+Enter>键结束,若在单个单元格中输入公式只能得到G1的行号1。

由于Excel的计算精度是15位,因此本例采用ROW($1:$15)作为LEFT函数的参数提取1到15位字符,这是最通用的做法。

2.LEFT函数的功能是提取字符串左边若干位字符,其语法如下:

=LEFT("中华人民共和国",3)——计算结果为“中华人”,提取左边3位;

=LEFT(A1,ROW($1:$15)))——由于表达式“ROW($1:$15)”可以生成1到15的自然数序列,因此此公式可以提取C2单元格的左边1~15位字符。当选择纵向15个连续的单元格后输入公式,并按<Ctrl+Shift+Enter>组合键结束时可以产生15个运算结果,效果如图7.87所示。

图7.87 逐一提取左边1~15位字符

3.LOOKUP函数功能相当强大,用法也相当复杂,要完整地介绍 LOOKUP函数的用法需要10页以上。本例只用到数组形式的模糊搜索,因此仅介绍此种情况下的LOOKUP用法。

数组形式、模糊搜索条件下的LOOKUP语法如下:

第一参数是搜索对象,可以是一个字符串、一个数字,也可以是一个单元格。第二参数是一个数组或一个区域(区域的值本质上就是一个数组),LOOKUP 会在第二参数中搜索第一参数的值,如果找不到第一参数的值,那么继续搜索比它小的最大值,找到后返回该值。

使用 lOOKUP 函数时,要求其第二参数的数据源升序排序,否则查找结果可能与预期不一致。

在图7.88中,公式“=LOOKUP(15,A1:A5)”的含义是在A1:A5中查找15,由于A1:A5中刚好有一个15,因此公式结果为15;图7.89中公式“=LOOKUP(40,A1:A5)”的含义是在A1:A5中查找40,由于找不到40,继续查找比40小的最大值,数据35符合条件,因此公式的返回值是35。

图7.88 查找15并返回15

图7.89 查找40,找不到时返回比它小的最大值

4.当使用LOOKUP函数执行模糊搜索(找不到目标值就继续查找比目标小的最大值)时,为了提升公式的通用性,通常会将LOOKUP的查找目标设置为最大值10的15次方(再大就没有必要了,超出了Excel的计算精度),然后在实际搜索过程中会搜索比它小的最大值。下面的例子可以展示LOOKUP搭配LEFT函数执行模糊搜索的过程。

图7.90中展示了LEFT函数从642578中逐一提取1位、2位、3位、4位、5位和6位字符时的运算过程和结果,运算结果包含6个值;图7.91则展示LOOKUP函数从这个数值中查找10^15的过程,由于找不到目标值,因此从数组中提取一个小于目标值的最大值642578作为最终结果。

Left函数的运算结果总是文本形式的,因此要把它们当作数值去参与运算时,需要在右边添加表达式“*1”,从而将文本型数字转换成数值。

图7.90 LEFT函数逐一提取左边N位字符

图7.91 使用LOOKUP从数组中搜索10^15

5.公式“=LOOKUP(10^15,LEFT(C2,ROW($1:$15))*1)”的运算过程比较复杂,可以通过图7.92来理解公式。

图7.92 图示LOOKUP+LEFT函数的运算过程

Excel 可否逐一罗列两列数据的相同值?

是否可以逐一罗列出两列数据的相同值?当数据源中的值变化时,提取出来的相同值也相应地更新。

以图7.80为例,A列和B列分别是去年和今年的优秀员工姓名,要求在D列罗列出两年都是优秀员工的姓名。

图7.80 去年与今年的优秀员工

解题步骤

判断两列是否存在相同项,使用COUNTIF函数计数即可,然后配合IF函数排除不符合条件的值,具体操作步骤如下。

1.在D1中输入标题“相同项”(见图7.81)。

2.选择D2:D11区域,然后输入以下数组公式:

输入公式后必须按组合键<Ctrl+Shift+Enter>结束,只按Enter键无法得到正确结果。

图7.81 提取两列的相同项

知识扩展

1.COUNTIF函数用于计算满足条件的单元格数量,第一参数是区域,第二参数是条件,条件可以是单个的也可以包含多个,当使用单个条件时统计结果也是单个的;当使用多个条件时,统计结果也包含多个,不过必须使用<Ctrl+Shift+Enter>组合键输入公式,否则只能取得单个结果。

2.本例中表达式“COUNTIF(B2:B10,A2:A11)”的含义是逐一统计A2:C11区域中每个单元格的值在B2:B10中的出现次数,如果未出现在B2:B10中则返回值为0,否则返回出现次数。表达式的计算结果包含10个值,使用数组公式才能一次性取得这10个值。

3.公式“=IF(COUNTIF(B2:B10,A2:A11)>0,A2:A11,"")”的含义是如果A2:A11区域中某个单元格的值出现在B2:B10区域,那么就返回该值本身,否则返回空文本。

IF函数在本例中的作用是排除不符合条件的值,使其返回空文本。可以通过以下方式理解公式的运算过程。

首先用COUNTIF函数统计A2:C11区域中每个单元格的值在B2:B10中的出现次数,效果如图7.82所示。

图7.82 统计A2∶C11的值在B2∶B10中的出现次数

图 7.82 中公式的返回值大于 0 时表示该姓名同时出现在去年和今年的区域中,此时用“COUNTIF(B2:B10,A2:A11)>0”作为IF函数的条件执行判断就可以提取符合条件的姓名,排除其他姓名。

4.本例公式提取出来的姓名未放置在相邻的单元格中,查看时不太方便。改用以下数组公式可以让结果放置在相邻的单元格。

以上公式的使用方法是:在D2单元格输入公式,按组合键<Ctrl+Shift+Enter>结束,然后按下填充柄将公式向下填充到D11单元格中(见图7.83)。

图7.83 将两列的相同值放在相邻的单元格

此公式的含义是:如果A2:A11区域中某个单元格的值出现在B2:B10区域中,那么返回其行号,否则返回行号9999。接着使用SMALL函数对这些行号从小到大排序,最后使用INDEX函数从A列提取目标姓名,姓名的行号由SMALL函数生成的升序行号决定。

由于符合条件的姓名都是生成该姓名所在行的行号(本例为2、4、10),不符合条件时则生成9999,因此SMALL函数产生的升序行号其实是2、4、10、9999、9999、9999、9999、9999、9999、9999,如图7.84所示。

图7.84 模拟SMALL函数生成的行号

此时使用INDEX函数从以上行号提取姓名即可,由于A9999没有姓名,因此INDEX会返回数值0,为了将0转换成空白,在INDEX函数的后面添加了表达式“&""”。

以上公式比较复杂,对于未系统学习数组公式的用户而言理解比较困难。不过这属于本案例的补充知识,读者可以忽略此公式,或者加入本书的售后服务群向图书作者提问。

Excel 如何将多种币别的金额统一为人民币汇总?

某公司的客户包含国内客户和海外客户,不同客户下单时采用的币别也不相同。例如图7.77中5家公司使用了人民币、美金、台币和港币4种币别对产品报价,现要求将它们统一转换成人民币,方便后续结算、汇总。如何才能快速统一币别呢?

图7.77 订单表

美金、台币和港币与人民币的汇率都统一按表7.2所示的汇率计算。

表7-2 汇率

解题步骤

本例采用IF函数执行条件判断比较简便,具体操作步骤如下。

1.在F2单元格中输入以下公式:

2.双击 F2 单元格的填充柄,从而将公式自动填充到已用区域的最后一行,效果如图 7.78所示。

图7.78 用人民币统一计算每个客户的订单金额

3.选择F2:F6区域,反复单击功能区的“开始”→“减少小数位数”,直到金额统一显示两位小数。

4.选择F7,然后按组合键<Alt+=>,从而快速生成求和公式,此时订单表结果如图7.79所示。

图7.79 按人民币汇总订单金额

知识扩展

1.IF函数是条件判断函数,它的语法如下:

第一参数代表条件,通常是一个表达式,其计算结果为True或False;第二参数代表条件为True时的返回值,第三参数则是条件为False时的返回值。简言之,IF函数的功能是第一参数成立时公式就返回第二参数的值,否则返回第三参数的值。

=IF(A1>=60,"及格","不及格")——当A1的值大于等于60时,公式的结果为“及格”,否则结果为“不及格”。

=IF(A1<0,"录入有误",IF(A1>=60,"及格","不及格"))——公式表示A1的值小于0时结果为“录入有误”,A1的值大于等于60时结果为“及格”,其他情况下结果为“不及格”。本公式使用了两个IF函数嵌套,从而可以应付三种情况,单个IF函数只能应付两种情况,非此即彼的判断才使用单个IF函数。

在本例中使用了3个IF函数嵌套,它表示E2的值是NTD时用0.197作为汇率,E2的值是USD时用6.34作为汇率,E2的值是HKD时用0.818作为汇率,其余情况下使用1作为汇率。

2.使用IF嵌套时要注意括号的数量必须配对,使用了多少个左括号就必须有多少个右括号。本例公式中3个IF函数嵌套使用,有3个左括号,因此公式必须以3个右括号结尾。

Excel 能否引用每个单元格的第二行数据?

图7.75中A列的省名和市名分别放在一个单元格的两行中,现要求在D列提取出所有市名,能否一次性完成?

图7.75 参赛人员资料表

解题步骤

单元格的第一行和第二行之间存在换行符,这是一个明显的规律,因此可以使用函数查找换行符的位置,然后使用函数提取该位置之后的所有字符,从而取得市名,具体操作步骤如下。

1.在D1中输入标题“市名”。

2.在D2中输录入以下公式:

3.双击D3单元格的填充柄,从而使公式向下填充到D11,公式会自动取得所有市名,效果如图7.76所示。

图7.76 提取市名

知识扩展

1.CHAR(10)代表换行符,FIND 函数是位置查找函数,表达式“FIND(CHAR(10),A2)”的含义是在A2单元格中查找换行符,返回换行位所在位置,如果A2单元格不存在换行符则会返回错误值。FIND函数的语法如下:

第一参数代表要查找的字符,第二参数代表被查找的字符,第三参数用于指定从第几个字符开始查找,它是可选参数,当忽略参数时表示从第一个字符开始查找。

整体而言,Find函数的功能是在第二参数中查找第一参数的值,查找位置由第三参数决定,返回值是第一参数在第二参中出现的位置。

2.MID函数用于从字符中指定位置开始提取指定长度的字符串,它的语法如下:

第一参数是字符串对象,第二参数代表起始位置,第三参数代表长度。如果要用一句话说明MID 函数的功能,就是从第一参数中提取部分字符,该字符的位置与长度分别由第二、第三参数决定。

=MID("中华人民共和国",3,2)——从第3位开始提取两个字,结果为“人民”;

=MID("中华人民共和国",1,7)——从第1位开始提取7个字,结果为“中华人民共和国”;

=MID("中华人民共和国",3,9)——从第3位开始提取9个字,结果为“人民共和国”,

提取长度大于实际的字符数量时会忽略多余的长度。

本例中MID的第二参数由 FIND函数计算而来,因为换行符的位置并不固定,只能用函数才能取得准确位置。

MID 的第三参数原本应该使用函数计算,从而取得市名长度,本例采取了更通用、更简便的方法——由于市名长度不会大于9位,同时又由于MID的第3参数会忽略超出的部分,因此直接采用9(换成99也行),只要大于等于市名的最大长度就可以提取出目标。

3.IF函数的功能是条件判断,符合指定条件时返回一个值,否则返回另一个值。本例中用IF函数判断A列的当前行是否有字符,如果没有则直接返回空文本,从而避免公式得到错误值。

在实际工作中,极少情况下是采用单个函数就能解决问题的,通常需要多个函数嵌套,用函数的计算结果作为另一个函数的参数,从而满足复杂的工作需求。

Excel 能按单元格背景色分类求和吗?

基于某些原因,图 7.71 中的业绩使用多种颜色加以标示,现要求对不同颜色的区域分类汇总,Excel如何才能实现?

图7.71 用颜色标示的业绩表

解题步骤

Excel的所有工作表函数都无法识别颜色,只有早期版本的宏表函数get.cell可以做到,因此本例使用get.cell函数搭配SUMIF函数解题,具体步骤如下。

1.选择C2单元格,按组合键<Ctrl+F3>,弹出“名称管理器”对话框。

2.单击“新建”按钮弹出“新建名称”对话框,将名称设置为“颜色”,将引用位置设置为“=get.cell(63,B2)”,设置界面如图7.72所示。

图7.72 新建名称“颜色”

3.单击“确定”按钮,返回工作表界面。

4.在C1中输入“颜色”,在C2中输入公式“=颜色”,然后双击C2的填充柄从而取得B2:B11区域中每个单元格的颜色编码,效果如图7.73所示。

5.在F2单元格中输入公式“=SUMIF($C$2:$C$11,颜色,$B$2:$B$11)”,公式的结果是无背景色的业绩之和。

6.将F2单元格的公式向下填充到F4,公式会分别计算出无色、红色和黄色三种颜色的业绩之和,效果如图7.74所示。

图7.73 识别数据源中的颜色编码

图7.74 对所有背景色的业绩分类汇总

知识扩展

1.只要使用了宏表函数,工作簿就不能保存为xlsx格式,否则定义的名称会自动丢失,从而导致公式计算出错。

2.get.cell函数的第一参数是63时表示计算单元格的颜色编码,0表示无色、3表示红色、6表示黄色、55表示蓝色、50表示绿色……get.cell函数的第二参数表示要在其中提取颜色的单元格,只能是单个单元格。

3.定义名称“颜色”前选择了 C2,名称的引用对象是“=get.cell(63,B2)”,公式的计算对象B2是相对引用,位于C2左方,因此名称“颜色”的含义就是提取左边一个单元格的颜色编码。

在C2单元格输入公式“=颜色”可以生成B2的颜色编码,在F2单元格输入公式“=颜色”则可以生成E2的颜色编码。

4.C 列作为公式“=SUMIF($C$2:$C$11,颜色,$B$2:$B$11)”的辅助区域,它提供了参考数据,没有C列的值就无法计算出业绩汇总,因此C列的值不能删除。如果觉得C列多余,可以隐藏C列。