25-46周 考勤分析专题 -1
优秀创作者
46-1 打卡记录分析判断 - 题目
在考勤系统中,根据每日打卡次数判断员工出勤状态是常见需求。通常规则如下:
0 次 → 没上班
4 次 → 打卡正常(上下班各两次)
其他 → 打卡异常
本节通过三种不同方法实现该逻辑,并对比其优缺点,提炼核心思路。
🔧 公式解析与对比
✅ 方法一:使用 LET + 多层嵌套 IF 实现条件判断
excel编辑
D2 = LET(E,E2:.E10000, IF(E=0,"没上班", IF(E=4,"打卡正常","打卡异常")))LET(E,E2:.E10000):定义变量 E 为打卡次数区域,提升可读性
IF(E=0,"没上班", ...):若打卡次数为 0,则返回“没上班”
否则进入第二层判断:IF(E=4,"打卡正常","打卡异常")
✅ 结果示例:
E=0 → “没上班”
E=4 → “打卡正常”
E=1,2,3 → “打卡异常”
✅ 优点:
代码简洁,逻辑清晰
使用 LET 提升可维护性
支持动态数组,批量处理多行
❌ 缺点:
嵌套层级较深,易误写
不适合复杂多条件场景
📌 适用场景:
✅ 方法二:使用 VLOOKUP 构建映射表(查表法)
excel编辑
D2 = IFNA(VLOOKUP(E2:.E1000,{0,"没上班";4,"打卡正常"},2,0),"打卡异常"){0,"没上班";4,"打卡正常"}:创建一个匿名二维数组作为“映射表”
第一列为打卡次数
第二列为对应状态
VLOOKUP(..., ..., 2, 0):查找当前值对应的标签(精确匹配)
IFNA(...,"打卡异常"):若未找到(如 E=1,2,3),返回默认值“打卡异常”
✅ 优点:
思路新颖,将判断转化为“查表”操作
易于扩展:只需修改映射表即可添加新规则
可视化强,便于非技术人员理解
❌ 缺点:
若映射表不完整,需依赖 IFNA 处理缺失值
对初学者有一定门槛(需理解数组常量)
📌 适用场景:
✅ 方法三:使用 IFS 函数实现多条件分支
excel编辑
D2 = LET(E,E2:.E10000, IFS(E=0,"没上班", E=4,"打卡正常", E<>4,"打卡异常"))LET(E,...):定义变量,增强可读性
IFS(...):支持多个条件依次判断
条件1:E=0 → 返回“没上班”
条件2:E=4 → 返回“打卡正常”
条件3:E<>4 → 返回“打卡异常”
✅ 特点:
IFS 是 Excel 365 引入的现代函数,专为多条件设计
支持任意数量条件,无需嵌套 IF
最后一个条件可用 TRUE 表示“否则”
✅ 优点:
代码结构清晰,逻辑直观
更加灵活,适合复杂判断逻辑
可读性强,易于调试
❌ 缺点:
要求支持 IFS 函数(WPS/Excel 365 支持)
若条件顺序不当可能导致错误(建议按优先级排列)
📌 适用场景:
📌 核心知识点总结
编号 | 知识点 | 说明 |
1 | 条件判断的核心是“分段映射” | 将数值(打卡次数)映射到文本状态,本质是分类逻辑 |
2 | IF 是基础条件函数 | 支持两分支判断,嵌套可实现多级逻辑 |
3 | LET 提升公式可读性和性能 | 定义变量避免重复引用,尤其适用于大范围计算 |
4 | VLOOKUP 可用于规则查表 | 将条件判断抽象为“查找表”,增强灵活性和可维护性 |
5 | IFS 是现代条件判断的最佳选择 | 替代嵌套 IF,语法更简洁,逻辑更清晰 |
6 | IFNA 保证输出完整性 | 处理查表失败情况,避免出现 #N/A 错误 |
🎯 实际应用建议
推荐使用方法三(IFS)
✅ 逻辑清晰、代码简洁
✅ 支持未来扩展(如增加“漏打卡”、“早退”等状态)
✅ 符合现代 Excel 开发规范
若需快速实现且规则简单,可用方法一(嵌套 IF)
✅ 无需额外函数,兼容性好
✅ 适合临时分析任务
若希望规则可视化、便于维护,推荐方法二(VLOOKUP 查表)
✅ 易于修改映射关系
✅ 适合多人协作环境
注意约束条件:
✅ 打卡次数为整数(0~4)
✅ 0 → “没上班”
✅ 4 → “打卡正常”
✅ 其他 → “打卡异常”
✅ 输出应为文本标签,不可为空
📚 小结口诀
三类判断要分清;
IF嵌套虽能解,
IFS更简明;
查表用VLOOKUP,
规则一改全更新。”
46-2 打卡记录筛选 -题目
在考勤分析中,常需从原始数据中筛选出实际有打卡记录的行,即:
本题通过三种不同方法实现该功能,并对比其优缺点,提炼核心思路与适用场景。
🔧 公式解析与对比
✅ 方法一:使用 FILTER 函数直接筛选(推荐)
excel编辑
A2 = FILTER(打卡记录!A2:.ZL30000, 打卡记录!E2:.E30000 > 0)打卡记录!A2:.ZL30000:指定整个数据区域(含序号、姓名、日期、判定、打卡次数等)
打卡记录!E2:.E30000 > 0:作为筛选条件,判断“打卡次数是否大于0”
FILTER(...):返回满足条件的所有行
✅ 优点:
语法简洁,逻辑清晰
性能优秀,支持动态数组
是现代 Excel 中最直观的筛选方式
❌ 缺点:
依赖 FILTER 函数(WPS/Excel 365 支持)
不适合需要额外处理(如去重、排序)的复杂场景
📌 适用场景:
✅ 方法二:使用 IF + TOCOL + WRAPROWS 实现“伪筛选”(扩展思路)
excel编辑
A2 = LET(A, 打卡记录!A2:.ZL30000,
WRAPROWS(TOCOL(IF(INDEX(A,,5)>0,A,B),3),
COLUMNS(A)))INDEX(A,,5):获取第5列(打卡次数)
IF(INDEX(A,,5)>0, A, B):
若打卡次数 > 0 → 返回整行数据
否则 → 返回 B(强制错误值,如空单元格或 #N/A)
TOCOL(...,3):将结果转为一维列,参数 3 表示忽略错误值
WRAPROWS(..., COLUMNS(A)):将一维数组重新整理为二维表,列宽与原表一致
✅ 优点:
不依赖 FILTER,兼容性更强
展示了“用 IF 构造真假值 + TOCOL 过滤错误”的经典技巧
可灵活控制输出格式
❌ 缺点:
公式较长,理解门槛较高
性能略低于 FILTER
需要预设列宽(COLUMNS(A))
📌 适用场景:
✅ 方法三:使用 GROUPBY 的筛选参数(高级聚合技巧)
excel编辑
A2 = LET(A, 打卡记录!A2:.ZL30000,
TAKE(GROUPBY(A, A, N,,0,, 打卡记录!E2:.E30000 > 0),, COLUMNS(A)))GROUPBY(A, A, N,,0,, 条件):
第一个 A:分组依据(按行唯一标识)
第二个 A:待处理数据
N:聚合函数(此处为占位符)
最后一个参数:打卡记录!E2:.E30000 > 0,表示只保留满足条件的行
TAKE(...,, COLUMNS(A)):提取所有列,保持原始结构
✅ 优点:
利用 GROUPBY 的筛选能力,无需显式过滤
展示了聚合函数在非统计场景下的灵活应用
可扩展至更复杂的条件组合
❌ 缺点:
过度复杂化问题,增加了计算负担
不符合“简单有效”的原则
对初学者不友好
📌 适用场景:
📌 核心知识点总结
编号 | 知识点 | 说明 |
1 | FILTER 是现代筛选的核心函数 | 直接根据条件提取数据,简洁高效,是首选方案 |
2 | IF + TOCOL 是通用过滤模式 | 通过构造真假值并利用 TOCOL 的错误屏蔽功能实现筛选,适用于无 FILTER 环境 |
3 | WRAPROWS 可将一维数组还原为二维表 | 结合 TOCOL 使用,实现“扁平化 → 结构化”的转换 |
4 | INDEX(A,,5) 提取指定列数据 | 用于访问多列区域中的某一列(如第5列:打卡次数) |
5 | B 作为错误值占位符 | 在 IF 中返回 B 可产生错误,被 TOCOL 自动忽略 |
6 | GROUPBY 支持筛选参数 | 虽然功能强大,但在此场景下属于“过度设计”,建议慎用 |
🎯 实际应用建议
优先推荐使用方法一(FILTER)
✅ 代码最短,性能最优
✅ 易于理解和维护
✅ 符合现代 Excel 开发规范
若环境不支持 FILTER,可用方法二(IF + TOCOL + WRAPROWS)
✅ 兼容性强,适用于旧版软件
✅ 展示了经典的数据清洗技巧
方法三仅作拓展学习参考
✅ 了解 GROUPBY 的高级用法
✅ 不推荐用于生产环境
注意约束条件:
✅ 筛选条件为:打卡次数 > 0
✅ 输出应包含所有字段(序号、姓名、日期、判定、打卡次数、考勤时间等)
✅ 排除“没上班”记录(即打卡次数为 0 的行)
✅ 保留原有顺序(按日期排列)
📚 小结口诀
FILTER最快又简单;
IF加TOCOL,
错误自动删;
GROUPBY虽能解,
复杂不如简。”
此操作是数据清洗流程中的关键一步。掌握这些技巧,不仅能高效完成筛选任务,还能迁移到其他业务场景(如订单过滤、客户筛选、日志提取等),大幅提升数据分析效率。