示例1
先看一个例子,如下图,要求统计每天每个机台的操作工人数,也就是从C列的单元格中,统计有几个人。

每个操作工姓名之间是使用统一的中文逗号分隔的。
如果有2个人,则是1个逗号分隔;如果是3个人,则是2个逗号分隔;如果是4个人,则是3个逗号分隔。
这样的观察和思考,你发现什么逻辑没?如果能数出来有几个逗号,逗号的个数加上1,就是人数了。
那么,如何计算出逗号的个数呢?这才是解决这个问题的关键所在。
可以这样考虑:先计算出C列单元格的原始字符长度,以C3单元格为例,使用LEN函数计算原始字符长度是13:
=LEN(C3)
再使用SUBSTITUTE函数将逗号替换掉,使用LEN函数计算替换掉逗号后的字符长度是10:
=LEN(SUBSTITUTE(C3,",",""))
这两个数字 13 和 10 之间的逻辑关系是什么?13 和 10 的差值 是 3,这个数字 3 就是被替换掉的逗号的个数啊!
这样,就知道了逗号的个数,也就可以计算出人数了:
=LEN(C3)-LEN(SUBSTITUTE(C3,",",""))+1
有人问了,如果姓名之间的分隔符号不一样怎么办?有的是中文逗号,有的是英文逗号,有的是顿号,有的是斜杠。
话说,数据规范才是数据管理和数据分析的最最最最最基本要求吧???如果连表格数据的规范都做不到,那就不要使用Excel了,直接在Word里做表好了。
分隔符号不统一,就必须先统一!
示例2
再看一个例子,如下图,要求统计每个人每个班次的工作时长。

如果上班时间和下班时间是正确的、合法的日期时间,那么将两个日期之间相减,就是工作时长了。
这个表格的特殊情况是,上班时间和下班时间是12小时制的数据,并且日期和时间之间有上午和下午名称。
但这个表格的上班时间和下班时间也是有规律可循的。
(1)上班时间
无论是什么班次,上班时间都是该日的时间,但需要根据班次来处理上班时间:如果是早班和日班,则是上午时间,将上班时间中的“上班”删除就可以了,但是如果是夜班,则在删除“下午”字样后需要加12小时(0.5天),转换为24小时制。
当然,也可以判断上班时间中是否含有“上午”或“下午”字样,如果含有“上午”字样,就直接删除“上午”,得到上班时间;如果含有“下午”字样,就先删除“下午”,再将日期时间加0.5。
(2)下班时间
如果F列的班次是“早班”和“日班”,则下班时间都是当日的下午时间,因此将“下午”两字删除后,加0.5,得到早班和日班的下班时间。
如果F列的班次是“夜班”,则下班时间都是第2天的上午时间,因此直接将“上午”两字删除,就得到夜班的下班时间。
通过以上分析,是不是找到了解决问题的逻辑思路?
我们可以使用一个通用公式进行综合计算,直接得到工作时长,公式如下:
=IF(F2<>"夜班",SUBSTITUTE(E2,"下午","")+0.5,SUBSTITUTE(E2,"上午",""))
-IF(F2<>"夜班",SUBSTITUTE(D2,"上午",""),SUBSTITUTE(D2,"下午","")+0.5)
整理后的标准上班时间是:
IF(F2<>"夜班",SUBSTITUTE(D2,"上午",""),SUBSTITUTE(D2,"下午","")+0.5)
整理后的标准下班时间是:
IF(F2<>"夜班",SUBSTITUTE(E2,"下午","")+0.5,SUBSTITUTE(E2,"上午",""))

这里的两个案例,函数很简单,核心函数是SUBSTITUTE,将指定字符替换为新字符,其他的函数也很简单,IF是必会的函数之一,LEN函数也没什么弯弯绕。
不过,在处理考勤数据时,需要了解日期和时间的规则,例如,你知道为什么要加数字 0.5,而不是加时间 12:00:00 ?
---------------------------------------------
解决问题的逻辑思路才是上乘妙法,只关注小技巧,不免落入了下乘!

