我在《高手专用函数Indirect,你值得拥有!》一文中给大家介绍了怎样使用Sum Indirect快速地汇总多个表格的数据。这个只是汇总了总和,但是有时候我们想要明细数据的汇总信息。方法有很多,比如合并计算,数据透视表的多重合并计算区域,甚至用SQL联合查询等,其实我们用一个公式就可以轻松搞定。 假设我们有Data 1、Data 2、Data 3这三个数据表,我们需要将所有表的数据汇总到一起。 在Summary表中输入以下公式就可以轻松汇总数据了。 =SUM(SUMIF(INDIRECT(''''Data ''&{1,2,3}&''''!B:B''),A2,INDIRECT(''''Data ''&{1,2,3}&''''!C:C''))) 或者 =SUM(SUMIF(INDIRECT({''''Data 1'''',''''Data 2'''',''''Data 3''''}&''!B:B''),A3,INDIRECT({''''Data 1'''',''''Data 2'''',''''Data 3''''}&''!C:C''))) 如果工作表较多,还可以用Row来生成序列数,从而生成工作表名称。 如下,这个需要使用数组形式,按Ctrl Shift Enter结束。 =SUM(SUMIF(INDIRECT(''''Data ''&ROW(1:3)&''''!B:B''),A4,INDIRECT(''''Data ''&ROW(1:3)&''''!C:C''))) 也可以用宏表函数来获取工作表名称数组,具体方法可以参考之前推送的文章《在Excel中设置目录页》中的介绍的获取工作表名称的方法。需要注意:汇总工作表中公式所在的列不要跟明细工作表中的数据放在相同的列,否则会产生循环引用。 比如我们新建名称ws,公式定义如下,来获取工作表名称的集合。 =MID(GET.WORKBOOK(1)&T(NOW()),FIND('']'',GET.WORKBOOK(1)&T(NOW())) 1,100) 在D5单元格输入以下公式,按Ctrl Shift Enter结束。 =SUM(SUMIF(INDIRECT(''''''&ws&''''!B:B''),A5,INDIRECT(''''''&ws&''''!C:C''))) 公式解释
拓展 上面是对于工作表用了数组的形式,其实,对于Sumif的条件,我们也可以用数组的形式。 还是上面的数据,我们求Lily和Cherry两个人的销量总和。 公式如下,注意这里条件参数{''Lily'';''Cherry''}中间是分号。 =SUM(SUMIF(INDIRECT(''''Data ''&{1,2,3}&''''!B:B''),{''Lily'';''Cherry''},INDIRECT(''''Data ''&{1,2,3}&''''!C:C''))) Sumif公式的结果是一个两行三列的数组,再用Sum求和就可以了。 Sumif公式结果={522,537,313;288,562,641} -- End -- |
|