查看原文
其他

极限挑战,令财会人惊讶的Excel多表统计!

2017-05-18 CFO之家



在职场,过程不重要,结果才是最重要的。


同样一个任务,一个人花了5小时,吃了很多苦,做到60分;另一个人花了5分钟,轻轻松松,做到了80分。


你会给第一个人点赞,夸她棒吗?


你只会觉得她很傻逼。


不要再因为你付出了多少辛苦,而自我感动了,你要多花那么多力气去做一件事,只能说明你实力还不够。


弱者才喜欢用苦劳说话,强者只会用业绩说话,用作品说话。


其实,很多时候你的委屈,都源于你把自己想得太重要。


也许你觉得自己特别悲惨,别人特别爽,只是因为你屏蔽了别人努力和辛酸的那一面。别人只不过是用你玩手机的时间来学习Excel而已。


职场不相信什么眼泪。


别哭了,要哭回家哭。


更酷的姿态是,把所有的委屈咽回去,变成我们的斗志。


下面通过一些案例告诉你,方法很重要,不懂方法,你每天辛苦做表也没用。



入门


在没打开表格之前以为很难,打开后发觉太简单了。

格式相同的表,多少个都一样,一个SUM函数就秒杀了。

=SUM('4.1:4.7'!D3)


语法:

SUM(起始表格:结束表格!单元格)


在有特殊字符的情况下需要加''


我们知道*是通配符,代表所有的意思,在这里也可以用*来实现统计。

=SUM('*'!D3)


基础


同样也是格式相同,但要汇总的形式不一样,要汇总每一个月份的总销量。


这里是用SUM+INDIRECT函数的组合实现。



可能很多人一开始直接就用SUM,可惜得到的是错误值。A2&"!C:C"被当成文本处理,而不是区域。

=SUM(A2&"!C:C")


我们正常的引用都是直接引用,如区域C:C。间接引用就是通过第三者才能获得的,如INDIRECT(“C:C”)。也就是说,只要嵌套个INDIRECT函数就可以。


假如现在有多个表格,而将表格名字写在A1这个单元格,现在要引用这个表的内容就可以用INDIRECT。这样当A1的表格名改变的时候,C1对应的内容也跟着改变。



进阶


现在换成统计商品的销售量。



难度瞬间就上来了,要结合好多函数。

=SUMPRODUCT(SUMIF(INDIRECT(ROW($1:$6)&"月!B:B"),A2,INDIRECT(ROW($1:$6)&"月!C:C")))


看起来很复杂,但实际上也不是太难理解。


INDIRECT(ROW($1:$6)&"月!B:B")这部分就是获取1-6月的B列

INDIRECT(ROW($1:$6)&"月!C:C")这部分就是获取1-6月的C列

SUMIF(1-6月的B列,A2,1-6月的C列)就是分别统计这6个表

SUMPRODUCT(SUMIF())就是将最终这6个表进行求和


骨灰


到了这一级别,拼的就是智商了。将同一个工作簿的所有表格汇总起来,第一个表名为汇总。



一指神功,天下无敌。


附代码(根据实际需求更改)

Sub 合并()

Dim sht As Worksheet, arr

For Each sht In Worksheets

    If sht.Name <> "汇总" Then

        i = sht.Range("b65536").End(xlUp).Row

        j = Sheets("汇总").Range("b65536").End(3).Row + 1

            arr = sht.Range("a2:f" & i)

            Sheets("汇总").Range("a" & j).Resize(UBound(arr), 6) = arr

    End If

Next

End Sub


推荐阅读


▎本文来自卢子,清华畅销书作者,《Excel效率手册 早做完,不加班》系列丛书创始人,个人公众号:Excel不加班(ID:Excelbujiaban),由CFO之家整理发布。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存