如何基于列条件横向实现缺勤成绩扣分的IF/THEN计算
如何基于列条件横向实现缺勤成绩扣分的IF/THEN计算
嗨,看起来你已经搞定了纵向的缺勤扣分计算,现在想把同一个员工的所有时段缺勤扣分结果统一横向放到同一行里对吧?我来帮你梳理下具体的实现方法~
首先,咱们先明确核心需求:要根据员工姓名(比如John Doe),跨多行汇总他在每个时段的总缺勤天数,然后套用「3天及以上缺勤每天扣5分(即100 - 缺勤天数×5),不足3天则留空」的规则,把结果横向展示在同一行的对应列中。
分步实现方法
1. 单时段横向计算(基础版)
比如你要在K3(对应Hour 6)计算John Doe的Hour 6缺勤扣分,可以用SUMIFS先精准汇总他在该时段的总缺勤天数,再嵌套你的扣分逻辑:
=LET(absent_days, SUMIFS($F:$F, $A:$A, $A3, $B:$B, 6), IF(absent_days>2, 100-(absent_days*5), ""))
- 解释:
SUMIFS($F:$F, $A:$A, $A3, $B:$B, 6)会匹配A列中与当前行姓名($A3)一致,且B列时段为6的所有记录,汇总F列的缺勤天数; LET函数是为了让公式更易读,先把缺勤天数存到absent_days变量里,再判断是否超过2天,符合条件就计算扣分后的分数,否则留空。
如果你的时段是文本格式(比如“Hour 6”),只需要把公式里的6改成"Hour 6"就行。
2. 多时段批量横向扩展(进阶版)
要是你想一次性生成多个时段的横向结果(比如K3对应Hour6、L3对应Hour5、M3对应Hour2),在Excel 365或新版WPS中可以用BYCOL函数批量处理,不用逐个修改公式:
=BYCOL({6,5,2}, LAMBDA(hour, LET(absent_days, SUMIFS($F:$F, $A:$A, $A3, $B:$B, hour), IF(absent_days>2, 100-(absent_days*5), ""))))
- 解释:
{6,5,2}是你需要横向计算的时段列表,BYCOL会遍历这个列表里的每个时段,自动计算对应结果并填充到K3、L3、M3这一列中。
关键逻辑说明
之前你用的纵向公式只能匹配当前行的时段,而SUMIFS可以跨多行匹配「姓名+时段」两个条件,不管员工的同时段记录分散在哪些行,都能精准汇总总缺勤天数,再把计算结果统一放到目标行的对应列,完美实现你要的横向展示效果。
备注:内容来源于stack exchange,提问作者Hunter1979
相关产品推荐
相关产品推荐

