在Excel中转​​换时间格式

如何将以stringforms输出的时间值(21m49s)转换为Excel时间值(00:21:49)? 如果没有给定小时值,那么该单元没有被分配一个0h的值。 在这种情况下,它只会显示分钟和秒钟。

还需要考虑60分钟以上的读数,其将显示为1h34m14s。

这是我如何收到时间值:

图片

这是我需要他们看起来像:

图片

尝试这个:

 =TIME(IF(ISNUMBER(FIND("h",A1)),LEFT(A1,FIND("h",A1)-1),0),IF(ISNUMBER(FIND("m",A1)),IF(ISNUMBER(FIND("h",A1)),MID(A1,FIND("h",A1)+1,FIND("m",A1)-1-FIND("h",A1)),LEFT(A1,FIND("m",A1)-1)),0),IF(ISNUMBER(FIND("s",A1)),IF(ISNUMBER(FIND("m",A1)),MID(A1,FIND("m",A1)+1,LEN(A1)-1-FIND("m",A1)),LEFT(A1,FIND("s",A1)-1)),0)) 

在这里输入图像说明


虽然@Jeeped打败了我,我会张贴我的UDF:

 Function TimeChange(str As String) As Date Dim strArr() As String Dim i As Integer Dim hr As Integer Dim min As Integer Dim sec As Integer str = Replace(str, "h", "h ") str = Replace(str, "m", "m ") str = Replace(str, "s", "s ") strArr = Split(Trim(str)) For i = 0 To UBound(strArr) Select Case Right(strArr(i), 1) Case "h": hr = Left(strArr(i), Len(strArr(i)) - 1) Case "m": min = Left(strArr(i), Len(strArr(i)) - 1) Case "s": sec = Left(strArr(i), Len(strArr(i)) - 1) End Select Next i TimeChange = TimeSerial(hr, min, sec) End Function 

在这里输入图像说明

可能作为VBAUDF¹。

 Function realTime(str As String) As Double Dim t As Long, vTMs As Variant, vTMP As Variant vTMs = Array("h", 0, "m", 0, "s", 0) vTMP = Array(str & ChrW(8203)) For t = LBound(vTMs) To UBound(vTMs) Step 2 vTMP = Split(vTMP(0), vTMs(t)) If IsNumeric(vTMP(0)) Then vTMs(t + 1) = Int(vTMP(0)) vTMP(0) = vTMP(1) End If Next t realTime = TimeSerial(vTMs(1), vTMs(3), vTMs(5)) End Function 

realTme_UDF


¹ 用户定义function(aka UDF)被放入标准模块代码表中。 点击Alt + F11 ,当VBE打开时,立即使用下拉菜单来插入►模块Alt + IM )。 将function代码粘贴到名为Book1 – Module1(Code)的新模块代码表中。 点击Alt + Q返回到您的工作表。