You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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为目标年月即可。

  • 批量统计所有员工:

    1. 提取唯一员工ID:在空白列输入=UNIQUE(出勤记录!A:A),生成无重复的员工ID列表。
    2. 批量计算出勤天数:在对应空白列输入=COUNTIFS(出勤记录!A:A, 单元格引用, 出勤记录!B:B, ">="&DATE(202X, X, 1), 出勤记录!B:B, "<="&EOMONTH(DATE(202X, X, 1), 0)),下拉填充完成所有员工的统计。

二、将结果拆分到不同工作表

方法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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:35:15