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

如何在Excel中对‘D hh u mm’格式的时间差列求和?

如何对Excel中“天数 D 小时 u 分钟 min”格式的文本时间差求和

针对D列这种文本格式的时间差,直接求和会触发值错误,以下是两种可行的解决方法:

方法1:Excel公式直接计算

通过提取文本中的数字并转换为时间数值求和,再转回目标格式。假设待求和的D列数据范围是D9:D15,在E列的求和单元格输入以下公式:

=INT(SUMPRODUCT((LEFT(D9:D15,FIND(" D",D9:D15)-1)+MID(D9:D15,FIND(" D",D9:D15)+3,FIND(" u",D9:D15)-FIND(" D",D9:D15)-3)/24+MID(D9:D15,FIND(" u",D9:D15)+2,FIND(" min",D9:D15)-FIND(" u",D9:D15)-2)/1440))&" D "&TEXT(SUMPRODUCT((LEFT(D9:D15,FIND(" D",D9:D15)-1)+MID(D9:D15,FIND(" D",D9:D15)+3,FIND(" u",D9:D15)-FIND(" D",D9:D15)-3)/24+MID(D9:D15,FIND(" u",D9:D15)+2,FIND(" min",D9:D15)-FIND(" u",D9:D15)-2)/1440)-INT(SUMPRODUCT((LEFT(D9:D15,FIND(" D",D9:D15)-1)+MID(D9:D15,FIND(" D",D9:D15)+3,FIND(" u",D9:D15)-FIND(" D",D9:D15)-3)/24+MID(D9:D15,FIND(" u",D9:D15)+2,FIND(" min",D9:D15)-FIND(" u",D9:D15)-2)/1440))),"h"" u ""m"" min """)

公式逻辑:

  1. 用LEFT提取天数,MID提取小时和分钟;
  2. 将小时转换为天(除以24)、分钟转换为天(除以1440),和天数相加得到单个时间差的天数值;
  3. SUMPRODUCT求和所有天数值;
  4. 用INT取总天数,剩余小数部分用TEXT转换为小时和分钟,拼接成目标格式。

方法2:VBA批量求和

如果数据量较大,用VBA处理更高效。运行以下代码可自动计算指定范围的时间差总和:

Sub SumTimeDiff()
    Dim rng As Range
    Dim cell As Range
    Dim totalDays As Long
    Dim totalHours As Long
    Dim totalMinutes As Long
    Dim tempStr As String
    Dim parts() As String
    
    ' 替换为你的D列数据范围
    Set rng = ActiveSheet.Range("D9:D15")
    
    For Each cell In rng
        If cell.Value <> "" Then
            ' 拆分文本提取数字
            tempStr = Replace(cell.Value, " D ", "|")
            tempStr = Replace(tempStr, " u ", "|")
            tempStr = Replace(tempStr, " min", "")
            parts = Split(tempStr, "|")
            
            ' 累加各时间单位
            totalDays = totalDays + CLng(parts(0))
            totalHours = totalHours + CLng(parts(1))
            totalMinutes = totalMinutes + CLng(parts(2))
        End If
    Next cell
    
    ' 处理进位:分钟转小时,小时转天数
    totalHours = totalHours + totalMinutes \ 60
    totalMinutes = totalMinutes Mod 60
    totalDays = totalDays + totalHours \ 24
    totalHours = totalHours Mod 24
    
    ' 替换为你要输出结果的单元格
    ActiveSheet.Range("E16").Value = totalDays & " D " & totalHours & " u " & totalMinutes & " min"
End Sub

代码逻辑:

  1. 遍历指定范围的每个单元格;
  2. 通过替换分隔符拆分文本,提取天数、小时、分钟的数值;
  3. 累加所有数值后处理进位,确保分钟<60、小时<24;
  4. 将最终结果输出到指定单元格。

优化建议

为了避免后续求和的麻烦,建议计算D列时间差时,同时在隐藏列(如F列)保留原始时间差数值:

  • F9输入公式:=C9-B9(存储日期格式的时间差)
  • D9输入公式:=INT(F9)&" D "&TEXT(F9,"h"" u ""m"" min """)
  • 求和时直接用:=INT(SUM(F9:F15))&" D "&TEXT(SUM(F9:F15)-INT(SUM(F9:F15)),"h"" u ""m"" min """)

这种方法更稳定,无需处理文本拆分。

内容的提问来源于stack exchange,提问作者I.B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:21:28