系统导出的Excel无法求和怎么办?
有些系统的字段设计的类型不合理,导致导出的数据全部是文本类型的,不管是数值,还是日期,这就是天坑!
数据源:系统导出的数据一份
需求:现在需要做一个按月查询每个销售员的查询模板!
需求非常简单,简单到我直接“就这……”!
提取销售员唯一值
▼我是一条数组公式,请“三键”录入
=INDEX($B:$B,MATCH(,COUNTIF($G$4:G4,$B$2:$B$200),)+1)&""
非本次重点,有兴趣的可以读一读专题文章,已不能再详尽!
专题文章:7种方法删除重复值,居然还有人不会?
下面是我们的重点,主要是有坑!
按月份查询金额合计
一般处于性能考虑,这里第一个想到的是使用SUMIF(S),所以我们写下如何公式:
=SUMIFS(E:E,B:B,G5,A:A,">="&DATE(2019,2,1),A:A,"<="&DATE(2019,2,28))
从逻辑角度,这个公式完全是OK,但是却没有得到期望的结果!
这种情况,一般考虑的就是日期可能是文本,所以我们去格式中观察一下,如果所有格式预览都是日期格式,那么肯定是文本!
都是日期格式,日期是特殊的数值,如果是真的日期,那么数字肯定不是日期
标准日期,应该是这样的!
知道是文本日期,那么问题反而简单了!
=SUMIFS(E:E,A:A,"2019-"&$H$2&"-*",B:B,G5)
以上是老套路了,SUMIFS支持通配符,处理这类问题范围简单!
但是依旧是0,可以确定的是公式是没有问题的,大家如果以后遇到单纯只是日期是文本的问题可以如上处理,这里不正确是因为还有坑!
还是有坑的,那就是金额也是文本格式,所以我们SUMIF求不出值!
这种情况,我们只能放弃SUMIF(S),退而求其次,使用性能低下的SUMPRODUCT!
=SUMPRODUCT((MONTH($A$2:$A$18)=$H$2)*$E$2:$E$18*($B$2:$B$18=G5))
肯定有很多人好奇,干嘛不上来直接使用SUMPRODUCT!问这话应该是没有感受过SUMPRODUCT在大量数据下卡死的状况!
小编一年要设计很多模板,往往数据都是从系统中导出的,所以首先数据源不能去改动,只能想其他方法处理,问题解决的同时要考虑性能,对于求和不到万不得已,不会考虑SUMPRODUCT!
本篇主要分享给模板设计者,给出一些处理方案和出现问题的检查方案!
区域大小自动判断,我们已经讲过几次,也是模板设计者非常重要的一种思维!
▼ 成品效果演示