1、如下图所示是每个月的收入费用表,表的结构是相同的(具有相同的列标题),但是需要汇总的项目的单元格在每个表中的位置不唯一,位置也不对应,所以不能使用求和函数或者合并计算来进行汇总,另外由于每个表的最左边有两列文本,所以也不能使用多重合并计算数据区域数据透视表来进行汇总,多重合并计算数据区域数据透视表只允许左边有一列文本区列。
2、在全年汇总的b2单元格中插入sumif函数,然后选中1月表中b列作为函数的第一个参数,然后以全年汇总表中的b1单元格中的收入作为条件充当函数的第二个参数,以一月份的d列作为函数的第三个参数,也就是求和的区域,这里需要注意第一个和第三个参数的两列均使用绝对引用,而中间的条件参数需要使用混合引用(固定行不固定列)
3、点按确定完成函数的输入后,拖动单元格右下角的填充柄向右拖动,此时可以看到1月的收入和费用都通过函数计算出来了,但是当公式向下拖动时,函数并没有因为向下拖动而变化,因为sumif函数引用的区域始终都是1月表,并没有因为向下拖动而逐一变为2月表、3月表等等。
4、这时需要用到indirect函数来帮助我们完成任务,选中b2单元格,然后直接在编辑栏中的sumif函数第一个参数之前输入indirect(),括号将原来的第一个参数括起来,删除原来的'1月',用鼠标点击a2取而代之,然后输入一个连接符号&,然后将!$B:$B变为"!$B:$B",也就是用双引号括起来,然后将第一个参数复制到第三个参数的位置将$B:$B改变为$d:$d。
5、将完成的函数向左侧复制,然后再向下复制,但是得到的结果是#REF!,仔细观察,参数中的本来应该引用的a1单元格由于向右侧拖动变成了b1单元格,因此应该将最开始设置公式的单元格内的a1单元格的引用变为相对应用,也就是需要固定列,使用绝对引用,行相对引用,如下第二个截图箭头所指。
6、再次将b2中的函数向右复制,然后再向下复制到12月所在行,由于目前只有6个月的收入费用表,7月到12月的表还不存在,因此在全年汇总的7月到12月行的函数结果是错误值。
7、如果使用的excel是excel2007或者以上的版本可以在函数外面嵌套一个iferror函数,然后以刚才的函数作为第一个参数,第二个参数用双引号引用的空值代替,这样就可以屏蔽错误值了。
8、如果使用的是excel2003版本,则需要将函数改为=IF(ISERROR(SUMIF(INDIRECT($A3&"!$B:$B"),全年汇总!B$1,INDIRECT($A3&"!$d:$d"))),"",SUMIF(INDIRECT($A3&"!$B:$B"),全年汇总!B$1,INDIRECT($A3&"!$d:$d"))),然后将函数向右侧复制,然后再向下方复制,此时7月到12月的表中原来的错误值就被屏蔽了,这里使用的是if(iserror(),“”,())这种函数实现的错误值屏蔽,为了操作方便在改造函数时候可以先将原来的函数剪切一下,然后输入上面的函数骨架,然后再讲剪切的内容复制到内部的两个括号内,完成函数的输入。
9、在d2单元格中通过对应的收入减去费用算出净利润,然后将函数向下复制,此时函数在6月到12月的净利润对应单元格出现了#VALUE!的错误值,应用同样的方法将函数改造为=IF(ISERROR(B2-C2),"",B2-C2),这样所有的错误值都被屏蔽掉了。
10、这个实例中的重点是通过indirect函数实现了随着多个月表中的收入或者费用数据汇总到一起了,也就是在全年汇总的月分列中随着月份的变化,函数引用的月份表也相应的变化,这总汇总需要表的名称要规范并且有规律,然后再汇总表中左侧列是各个表的表名。