如何在Microsoft Excel中计算员工月度工作日数并分表呈现
计算员工当月出勤天数并分表展示
一、统计每位员工的当月出勤天数
假设原始出勤记录在名为「出勤记录」的工作表中,A列为员工ID,B列为出勤日期。
单个员工出勤天数计算:
使用COUNTIFS函数精准统计,公式示例:=COUNTIFS(出勤记录!A:A, "员工ID", 出勤记录!B:B, ">="&DATE(202X, X, 1), 出勤记录!B:B, "<="&EOMONTH(DATE(202X, X, 1), 0))
替换"员工ID"为具体编号,202X, X为目标年月即可。批量统计所有员工:
- 提取唯一员工ID:在空白列输入
=UNIQUE(出勤记录!A:A),生成无重复的员工ID列表。 - 批量计算出勤天数:在对应空白列输入
=COUNTIFS(出勤记录!A:A, 单元格引用, 出勤记录!B:B, ">="&DATE(202X, X, 1), 出勤记录!B:B, "<="&EOMONTH(DATE(202X, X, 1), 0)),下拉填充完成所有员工的统计。
- 提取唯一员工ID:在空白列输入
二、将结果拆分到不同工作表
方法1:手动创建并引用
新建以员工ID命名的工作表,直接引用统计好的出勤天数单元格,比如=统计结果!B2(假设统计结果在「统计结果」表的B2单元格)。
方法2:VBA批量生成
按Alt+F11打开VBA编辑器,插入模块后粘贴以下代码:
Sub 生成员工工作表() Dim ws As Worksheet, newWs As Worksheet Dim lastRow As Long, i As Long Dim empID As String Set ws = ThisWorkbook.Worksheets("统计结果") '替换为你的统计结果工作表名称 lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To lastRow '假设第一行是表头,从第二行开始为员工ID empID = ws.Cells(i, 1).Value '检查是否已存在对应工作表 On Error Resume Next Set newWs = ThisWorkbook.Worksheets(empID) On Error GoTo 0 If newWs Is Nothing Then Set newWs = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)) newWs.Name = empID End If '写入出勤数据 newWs.Range("A1").Value = "员工ID" newWs.Range("B1").Value = "当月出勤天数" newWs.Range("A2").Value = empID newWs.Range("B2").Value = ws.Cells(i, 2).Value Set newWs = Nothing Next i End Sub
运行代码后,会自动为每个员工创建对应工作表并填入出勤天数。
内容的提问来源于stack exchange,提问作者gidmak
相关产品推荐
相关产品推荐

