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

Excel自动化数据收集求助:按部门汇总tasks与default工时

解决方案:按指定部门汇总Tasks与Default项工时

Got it, let's tackle this problem of automating the hour summation for specific departments and task types. Here are two straightforward solutions that will get you the exact totals you mentioned (90.07 for 部门B, 1.83 for 部门A, 166.68 for 部门C):

方法一:Excel公式(快速直接)

假设你的数据结构如下:

  • 部门列:A列(从A2开始的有效数据)
  • 任务类型列:B列(包含"tasks"或"default")
  • 工时列:C列(对应工时数值)

你可以使用SUMIFS结合数组条件来一次性汇总两个任务类型的工时:

单部门汇总公式

=SUM(SUMIFS(C:C, A:A, "部门B", B:B, {"tasks","default"}))

这个公式的逻辑是:

  1. SUMIFS分别匹配"部门B" + "tasks"、"部门B" + "default"两组条件,得到两个单独的工时总和
  2. SUM将这两个结果相加,得到部门B的总工时(自动保留两位小数即可匹配90.07的结果)

替换公式中的部门名称,就能得到部门A和部门C的汇总值:

  • 部门A:=SUM(SUMIFS(C:C, A:A, "部门A", B:B, {"tasks","default"}))
  • 部门C:=SUM(SUMIFS(C:C, A:A, "部门C", B:B, {"tasks","default"}))

如果需要更灵活(比如通过下拉菜单选择部门),可以把部门名称换成单元格引用,比如=SUM(SUMIFS(C:C, A:A, F2, B:B, {"tasks","default"})),其中F2是你选择部门的单元格。

方法二:VBA脚本(全自动化批量处理)

如果你需要定期更新数据并自动生成所有指定部门的汇总表,可以用这个VBA脚本,它会自动遍历指定部门列表,计算总工时并输出结果:

Sub AutoCalculateDepartmentHours()
    Dim dataSheet As Worksheet
    Dim lastRow As Long
    Dim deptList As Variant
    Dim i As Integer
    Dim totalHours As Double
    
    ' 替换为你的数据所在工作表名称
    Set dataSheet = ThisWorkbook.Worksheets("Data")
    
    ' 获取数据的最后一行(避免空行干扰)
    lastRow = dataSheet.Cells(dataSheet.Rows.Count, "A").End(xlUp).Row
    
    ' 指定需要汇总的部门列表
    deptList = Array("部门A", "部门B", "部门C")
    
    ' 在工作表的D-E列生成汇总表头
    dataSheet.Range("D1").Value = "目标部门"
    dataSheet.Range("E1").Value = "Tasks+Default总工时"
    dataSheet.Range("D1:E1").Font.Bold = True
    
    ' 遍历每个部门计算总工时
    For i = LBound(deptList) To UBound(deptList)
        ' 计算当前部门的tasks和default工时总和
        totalHours = Application.Sum( _
            Application.SumIfs( _
                dataSheet.Range("C2:C" & lastRow), _
                dataSheet.Range("A2:A" & lastRow), deptList(i), _
                dataSheet.Range("B2:B" & lastRow), Array("tasks", "default") _
            ) _
        )
        ' 将结果写入工作表,保留两位小数
        dataSheet.Range("D" & i + 2).Value = deptList(i)
        dataSheet.Range("E" & i + 2).Value = Round(totalHours, 2)
    Next i
    
    MsgBox "汇总完成!结果已写入D-E列。", vbInformation
End Sub

使用说明:

  1. 按Alt + F11打开VBA编辑器
  2. 插入一个新模块,把上述代码粘贴进去
  3. 修改代码中的工作表名称("Data")为你的实际工作表名
  4. 运行脚本,就能自动生成所有指定部门的汇总结果,和你给出的示例数值完全匹配

内容的提问来源于stack exchange,提问作者justin.higgs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:10:20