首页  编辑  

Excel把xx小时xx分钟xx秒转换为xx秒

Tags: /计算机文档/Office/   Date Created:
Excel中,把xx小时xx分钟xx秒这种数据,转换为xx秒,其中小时,分钟,秒的部分都可能缺失,例如:
110小时2分钟30秒 396150
1小时02分钟30秒 3750
1小时12分钟30秒 4350
2分钟20秒 140
20秒 20
1小时02分钟 3720
1小时 3600
2分钟2秒 122
2分钟 120
1小时2秒 3602

公式:
=IFERROR(VALUE(LEFT(A1,FIND("小时",A1)-1)),0)*3600
+IFERROR(VALUE(MID(A1,FIND("小时",A1)+2,FIND("分钟",A1)-FIND("小时",A1)-2)), IFERROR(VALUE(LEFT(A1,FIND("分钟",A1)-1)),0))*60
+IFERROR(VALUE(MID(A1,FIND("分钟",A1)+2,FIND("秒",A1)-FIND("分钟",A1)-2)), IFERROR(VALUE(MID(A1,FIND("小时",A1)+2,FIND("秒",A1)-FIND("小时",A1)-2)), IFERROR(VALUE(LEFT(A1,FIND("秒",A1)-1)),0)))

如果数据是 x时x分x秒 的格式,请使用以下公式:
=IFERROR(VALUE(LEFT(A1,FIND("时",A1)-1)),0)*3600
+IFERROR(VALUE(MID(A1,FIND("时",A1)+1,FIND("分",A1)-FIND("时",A1)-1)), IFERROR(VALUE(LEFT(A1,FIND("分",A1)-1)),0))*60
+IFERROR(VALUE(MID(A1,FIND("分",A1)+1,FIND("秒",A1)-FIND("分",A1)-1)), IFERROR(VALUE(MID(A1,FIND("时",A1)+1,FIND("秒",A1)-FIND("时",A1)-1)), IFERROR(VALUE(LEFT(A1,FIND("秒",A1)-1)),0)))

如果还希望支持 xx天xx小时xx分钟xx秒的数据,其中,天、小时、分钟、秒都可能存在缺失的情况,那么考虑使用VBA函数实现:
  1. 在 Excel 中按 Alt + F11 打开 VBA 编辑器
  2. 插入 → 模块
  3. 粘贴以下代码:
Function TimeToSeconds(text As String) As Double
    ' 下面的单位可以根据需要修改,例如改成 天,小时,分钟,秒
    ' 或者改用英文单位 days, hours, minutes, seconds
    Const UNIT_DAY As String = "天"
    Const UNIT_HOUR As String = "小时"
    Const UNIT_MINUTE As String = "分钟"
    Const UNIT_SECOND As String = "秒"

    Dim days As Double, hours As Double, minutes As Double, seconds As Double
    Dim pos As Long, tempText As String

    days = 0: hours = 0: minutes = 0: seconds = 0
    tempText = Trim(text)

    On Error Resume Next

    pos = InStr(tempText, UNIT_DAY)
    If pos > 0 Then
        days = Val(Trim(Left(tempText, pos - 1)))
        tempText = Trim(Mid(tempText, pos + Len(UNIT_DAY)))
    End If

    pos = InStr(tempText, UNIT_HOUR)
    If pos > 0 Then
        hours = Val(Trim(Left(tempText, pos - 1)))
        tempText = Trim(Mid(tempText, pos + Len(UNIT_HOUR)))
    End If

    pos = InStr(tempText, UNIT_MINUTE)
    If pos > 0 Then
        minutes = Val(Trim(Left(tempText, pos - 1)))
        tempText = Trim(Mid(tempText, pos + Len(UNIT_MINUTE)))
    End If

    pos = InStr(tempText, UNIT_SECOND)
    If pos > 0 Then
        seconds = Val(Trim(Left(tempText, pos - 1)))
    End If

    On Error GoTo 0

    TimeToSeconds = days * 86400 + hours * 3600 + minutes * 60 + seconds
End Function

在 Excel 中任意单元格写: =TimeToSeconds(A1)
运行效果:
110小时2分钟30秒 396150
1小时02分钟30秒 3750
1小时12分钟30秒 4350
2分钟20秒 140
20秒 20
1小时02分钟 3720
1小时 3600
2分钟2秒 122
2分钟 120
200天21秒 17280021
1天5分钟 86700
1天 86400
1天1小时 90000
2天110小时2分钟30秒 568950