

EXCEL VBA秒转为时分秒的函数后改转换为天时分秒的通用函数
'秒转为时分秒的函数
'后改进为秒转换为天时分秒的通用函数
'2种格式选择
'intType为0 天时分秒 其中 秒分时 2位对齐 且显示最全的内容 ,没有内容的补齐0 '000天00小时45分02秒
'intType为1 天时分秒 其中 秒分时 按实际长度 '45分2秒
‘来源:Excel中国 作者: tmtony 转载请务必保留此行 http://www.excel-cn.com/tip/237-cn.html
Public Function SecToDHMS(lngSec As Long, Optional intType As Integer = 0)
Dim lngMod1 As Long
Dim lngMod2 As Long
Dim lngMod3 As Long
Dim strFormat As String
Select Case intType
Case 0
strFormat = "00" '秒分时 2位对齐 且显示最全的内容 ,没有内容的补齐0 '000天00小时45分02秒
Case 1
strFormat = "0" '秒分时 按实际长度 '45分2秒
End Select
If intType = 0 Then
lngMod3 = (lngSec Mod 86400)
lngMod2 = (lngSec Mod 3600)
lngMod1 = (lngMod2 Mod 60)
SecToDHMS = Format(Int(lngSec / 86400), "000") & "天" & Format(Int(lngMod3 / 3600), strFormat) & "小时" & Format(Int(lngMod2 / 60), strFormat) & "分" & Format(lngMod1, strFormat) & "秒" '& IIf(lngMod1 = 0, "", lngMod1 & "秒")
Else
If lngSec < 60 Then
SecToDHMS = Format(lngSec, strFormat) & "秒"
ElseIf lngSec < 3600 Then
lngMod1 = (lngSec Mod 60)
SecToDHMS = Format(Int(lngSec / 60), strFormat) & "分" & Format(lngMod1, strFormat) & "秒" ' 'IIf(lngMod1 = 0, "", lngMod1 & "秒")
ElseIf lngSec < 86400 Then
lngMod2 = (lngSec Mod 3600)
lngMod1 = (lngMod2 Mod 60)
SecToDHMS = Format(Int(lngSec / 3600), strFormat) & "小时" & Format(Int(lngMod2 / 60), strFormat) & "分" & Format(lngMod1, strFormat) & "秒" ' & IIf(lngMod1 = 0, "", lngMod1 & "秒")
Else
lngMod3 = (lngSec Mod 86400)
lngMod2 = (lngSec Mod 3600)
lngMod1 = (lngMod2 Mod 60)
SecToDHMS = Format(Int(lngSec / 86400), "000") & "天" & Format(Int(lngMod3 / 3600), strFormat) & "小时" & Format(Int(lngMod2 / 60), strFormat) & "分" & Format(lngMod1, strFormat) & "秒" '& IIf(lngMod1 = 0, "", lngMod1 & "秒")
End If
End If
'SecToDHMS= (lngSec \ 86400) & "天" & (lngSec Mod (lngSec \ 86400) * 86400) \ 3600; "小时" & (lngSec Mod 3600) \ 60; "分" & s Mod 60; "秒"
End Function
如果直接在Excel 转换,则可以使用
例如:将100秒转成时分秒的格式
=TEXT(A1/86400,"h小时m分钟s秒") 0小时1分钟40秒
=TEXT(C1/86400,"d天h小时m分钟s秒") 0天 0小时1分钟40秒
=TEXT(C1/86400,"hh:mm:ss") 00:01:40