通过VBA实现按员工每日维度删除Excel考勤重复打卡记录
针对你需要的「按员工当日维度清理D/E列重复值+删除D/E均为空行」的需求,给你两种实操方案:
一、Excel自带功能手动处理(适合数据量不大的情况)
1. 建辅助列标记唯一维度
在空白列(比如F列)第一行(F2)输入公式:=A2&B2&D2&E2,下拉填充到所有数据行。这个公式把「员工ID/姓名(A列)+日期(B列)+打卡时间(D+E列)」合并成唯一标识,用来区分“同一员工当日重复打卡”和“不同日期相同时间”的情况。2. 删除D、E列全空的行
选中整个数据区域(含表头),点「数据」选项卡→「筛选」。分别点击D、E列的筛选箭头,只勾选「空白」,此时显示的就是D、E都为空的行,选中这些行右键删除,再取消筛选。3. 按维度去重
再次选中数据区域,点「数据」选项卡→「删除重复值」。在弹出的窗口里,勾选刚才建的辅助列(F列),以及你需要保留的核心列(比如员工列、日期列等),点击「确定」即可删除同一员工当日的重复打卡记录。最后删掉辅助列F就行。
二、Power Query批量处理(适合数据量大的场景)
1. 导入数据到Power Query
选中数据区域,点「数据」选项卡→「从表格/区域」,勾选「我的表格有标题」,进入Power Query编辑器。2. 过滤D、E全空的行
点击「添加列」→「自定义列」,输入公式:=if [打卡时间1] = null and [打卡时间2] = null then "删除" else "保留"(把括号里的表头换成你实际的D、E列表头)。然后点自定义列的筛选箭头,只留「保留」,再删掉这个自定义列。3. 按员工+日期+打卡时间去重
同时选中员工列、日期列、D列、E列,点「主页」选项卡→「删除重复项」,Power Query会自动剔除同一员工当日的重复打卡记录。4. 导出处理后的数据
点「主页」→「关闭并上载」,处理好的数据会自动导入到新的工作表里。
内容的提问来源于stack exchange,提问作者B Sager

