在Excel中转换时间格式

在Excel中转换时间格式,excel,excel-formula,excel-2010,Excel,Excel Formula,Excel 2010,如何将以字符串(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"

如何将以字符串(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
试试这个:

=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

可能作为VBA自定义项

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



用户定义函数(也称为UDF)被放入标准模块代码表中。点击Alt+F11,当VBE打开时,立即使用下拉菜单插入► 模块(Alt+I,M)。将功能代码粘贴到名为Book1-Module1(代码)的新模块代码表中。点击Alt+Q返回工作表。

可能作为VBA自定义项

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



用户定义函数(也称为UDF)被放入标准模块代码表中。点击Alt+F11,当VBE打开时,立即使用下拉菜单插入► 模块(Alt+I,M)。将功能代码粘贴到名为Book1-Module1(代码)的新模块代码表中。点击Alt+Q返回工作表。

检查公式
=Time()
首先检查您收到的信息是excel时间值还是字符串。我通常使用的简单测试是`=isnumber(a1)1,其中a1是我要测试的单元格。如果返回为true,则最有可能为excel时间值,如果为false,则为string如果为excel时间值,则需要为时间设置单元格格式。查找自定义单元格格式。如果是字符串,则需要从文本中删除数字并将其转换为值。在这种情况下,请查阅excel的右、左、中、和时间函数,它会给您一些想法。此外,您的读数是否会超过60分钟,因为这也会改变情况。@谢谢您的帮助!用你的问题更新帖子。查看右、左、中。检查公式
=Time()
首先检查您收到的信息是excel时间值还是字符串。我通常使用的简单测试是`=isnumber(a1)1,其中a1是我要测试的单元格。如果返回为true,则最有可能为excel时间值,如果为false,则为string如果为excel时间值,则需要为时间设置单元格格式。查找自定义单元格格式。如果是字符串,则需要从文本中删除数字并将其转换为值。在这种情况下,请查阅excel的右、左、中、和时间函数,它会给您一些想法。此外,您的读数是否会超过60分钟,因为这也会改变情况。@谢谢您的帮助!用你的问题更新帖子。看向右边,左边,中间现在。