当前位置: > 热评

你会跨工作簿统计吗?

时间:2022-04-20 05:31:51 热评 我要投稿

粉丝留言,跨表用SUMIF被坑过,这里的表指工作簿。跨工作簿要打开所有工作簿才能引用正确,否则是错误值,确实坑人。

另外一位粉丝想学条件计数。

这两个留言,卢子就一起说了,文章有点长,请用心看完。

大多数情况下,我们对表格统计都会在同一张工作簿进行,这样操作起来非常方便,不过有时也会进行跨工作簿统计。

跨工作簿条件求和最常见的两个问题:

01跨工作簿区域应该如何写?

02关闭工作簿后,统计出来的结果变成错误值怎么回事?

条件求和,首先想到的是用SUMIF函数进行统计。

函数语法:

=SUMIF(条件区域,条件,求和区域)

其实跨工作簿的情况下,区域的选取跟在同一个工作簿一样,都是用鼠标选取,而不是手写。有一点必须要记住:两个工作簿必须同时打开。

鼠标选取区域详见动画

最终公式为:

=SUMIF([跨工作簿统计1.xlsx]Sheet1!$B:$B,A2,[跨工作簿统计1.xlsx]Sheet1!$D:$D)

一旦将跨工作簿统计1.xlsx关闭,修改统计月份,金额就变成错误值。

在Excel中,并不是所有函数都支持跨工作簿,如SUMIF、COUNTIF函数就不支持,而VLOOKUP、SUMPRODUCT函数就支持。这里可以借助SUMPRODUCT函数实现跨工作簿统计。

函数语法:

=SUMPRODUCT((条件区域=条件)*求和区域)

我们重新看一下出错的单元格,公式变成:

=SUMIF("C:UserschenxiluDesktop[跨工作簿统计1.xlsx]Sheet1"!$B:$B,A2,"C:UserschenxiluDesktop[跨工作簿统计1.xlsx]Sheet1"!$D:$D)

C:UserschenxiluDesktop这个是路径,意思就是说这个表格存在卢子电脑的桌面。

[跨工作簿统计1.xlsx]Sheet1这个是工作簿名称跟工作表名称。

不要看公式很长,其实拆分开真的没什么,都是很简单的东西。

SUMPRODUCT函数不支持引用整列,这里只要将原来的区域改小,稍作变动就完成了最终的统计。

=SUMPRODUCT(("C:UserschenxiluDesktop[跨工作簿统计1.xlsx]Sheet1"!$B$2:$B$100=A2)*"C:UserschenxiluDesktop[跨工作簿统计1.xlsx]Sheet1"!$D$2:$D$100)

这样即使工作簿不打开的情况下,也能正确统计。

SUMPRODUCT函数也可以换成SUM函数,不过需要按Ctrl+Shift+Enter三键结束。

=SUM(("C:UserschenxiluDesktop[跨工作簿统计1.xlsx]Sheet1"!$B$2:$B$100=A2)*"C:UserschenxiluDesktop[跨工作簿统计1.xlsx]Sheet1"!$D$2:$D$100)

这2个函数90%的情况下可以互相代替,用SUMPRODUCT函数的好处就是支持数组公式,不用按三键。

再说一个特殊案例,就是在输入数据的时候,可能会中间出入文本,多敲个空格之类的,如果直接求和会出错。

用*这种方法,文本*数字就是错误值,不管用SUMPRODUCT函数还是SUM函数都无法避免出错。

不过SUMPRODUCT函数还隐藏了另外一种用法,参数用,(逗号)隔开,可以将文本当做0处理。

=SUMPRODUCT(--(MONTH($A$2:$A$26)=F2),$D$2:$D$26)

语法:

=SUMPRODUCT(数字区域1,数字区域2,数字区域3)

这里的(MONTH($A$2:$A$26)=F2)得到的是逻辑值,并不是数字,所以用--转换成数字1、0,从而可以正确求和。

关于条件计数,清风徐来以前写过一篇COUNTIF与SUMPRODUCT函数过招!

1.下面请看第一场比赛:如何统计值班经理的值班次数?

COUNTIF函数首先应战,在H2单元格输入公式,并向下填充。

=COUNTIF(A:A,G2)

COUNTIF函数语法:

=COUNTIF(条件区域,条件)

SUMPRODUCT函数也不甘示弱,在I2单元格输入公式,并向下填充。

=SUMPRODUCT(($A$2:$A$10=G2)*1)

SUMPRODUCT函数单条件计数语法:

=SUMPRODUCT((条件1)*1)

或者

=SUMPRODUCT(--(条件1))

2.第一场比赛可谓势均力敌,不分胜负。下面请看第二场比赛:统计值班经理在中午时间段的值班次数。

两个条件?COUNTIF函数顿时傻眼了,多条件计数是COUNTIF函数心里永远的痛。然而,SUMPRODUCT函数却气定神闲,在H2单元格输入公式,并向下填充。

=SUMPRODUCT(($A$2:$A$10=G2)*($B$2:$B$10=$H$1))

SUMPRODUCT函数多条件计数语法:

=SUMPRODUCT((条件1)*(条件2)*(条件n))

“打虎亲兄弟,上阵父子兵”,看到兄弟COUNTIF函数有难,擅长多条件计数的COUNTIFS函数果断出手了,在I2单元格输入公式,并向下填充。

=COUNTIFS(A:A,G2,B:B,$H$1)

COUNTIFS函数语法:

=COUNTIFS(条件区域1,条件1,条件区域2,条件2,条件区域n,条件n)

3.第二场比赛的结果大家有目共睹,胜利属于SUMPRODUCT函数。下面请看第三场比赛:值班经理都用了一个字作为自己的简称,如何根据简称统计值班次数?

SUMPRODUCT函数没有了之前的淡定从容,陷入了沉思中。而COUNTIF函数却露出了久违的笑容,它拿出了自己的绝活,在H2单元格输入公式,并向下填充。

=COUNTIF(A:A,"*"&G2&"*")

在这里,“*”代表通配符,表示任意一个或者多个字符。在Excel函数中,能与通配符配合使用的函数并不多,COUNTIF函数是其中的一个,当然也包括了COUNTIFS函数,SUMIF函数,SUMIFS函数,VLOOKUP函数,MATCH函数等等。

SUMPRODUCT函数想破了脑袋,借助其他函数,终于也统计出来了。

=SUMPRODUCT(--ISNUMBER(FIND(G2,$A$2:$A$10)))

这个公式比较复杂,下面我们按步骤来分析。

Step 01先看最里层的FIND函数, FIND函数的语法:

=FIND(查找的字符,查找的地方)

在I2,I3单元格分别输入公式:

=FIND("风","风清扬")

=FIND("风","东方不败")

在第一个公式中,因为字符“风”在字符串“风清扬”的第一个位置,所以结果返回1。而第二个公式中,因为字符“风”没有在字符串“东方不败”中,所以结果返回错误值。

Step 02熟悉了FIND函数的基本运用后,我们在I2单元格输入公式:

=FIND(G2,$A$2:$A$10)

我们知道,在“A2:A10”区域中,存在了两个“风清扬”,按道理,字符“风”是能查找到的,应该返回数字才对啊,但是却返回错误值,这究竟是为什么呢?

FIND函数的第二个参数是一个区域,所以返回的结果是若干个数据,多个数据放在一个单元格中,当然会出错了。这个时候,我们需要借助一个神器:独孤九剑,也就是F9键。选择公式所在单元格,点击编辑栏,按F9键。

Step 03带有红色方框的数字个数就代表了该值班经理的值班次数。那么怎么统计数字的个数呢?可以使用ISNUMBER函数,如果是数字就返回TRUE,否则就返回FALSE。

=ISNUMBER(FIND(G2,$A$2:$A$10))

Step 04再结合SUMPRODUCT函数,结果便出来了,公式在上面已经给出。

第三场比赛,虽然SUMPRODUCT函数最后完成了任务,但评委的眼睛是雪亮的,这一次,评委把票投给了COUNTIF函数。

比赛的结果并不重要,重要的是,在什么时候该使用什么函数,按卢神的说法就是:怎么简单怎么来,作为这次比赛的吃瓜观众,你们说呢?

你要像清风徐来一样厉害吗?

恭喜这3位粉丝:KK、smile、Liu zg (则喜),获得书籍《Excel跟卢子一起学 早做完,不加班》,加卢子微信chenxilu2019

VIP 888 元,所有 视频课程 ,终生免费学,提供一年在线答疑服务。

报名后加卢子微信chenxilu2019,发送报名截图邀请进群。

推荐:万般皆套路!Excel中让你爽到爆的查找、求和套路

上篇:SUMPRODUCT函数自称求和之王,SUMIFS不服气要来PK

你还想看什么函数PK?

作者:卢子,清华畅销书作者,《Excel效率手册 早做完,不加班》系列丛书创始人,个人公众号:Excel不加班(ID:Excelbujiaban)