将文本(天、分钟、秒)转换为天

将文本(天、分钟、秒)转换为天
  1. 18hr 28m 49s
  2. 18 days 19hr 12m 30s

我有一张包含文本值的 Excel 表(如上面的示例)。

有什么方法可以将它们转换为天数,例如:

  • 如果我有 18 小时,它会四舍五入到最接近的天数并变成 1 天。
  • 如果是 18 天 19 小时,则变为 19 天

请注意,这些值是文本格式。不是日期。不是时间。

答案1

您可以使用以下公式

=IF(MID(A1,FIND("hr",A1,1)-2,2)>12,IF(ISNUMBER(FIND("day",A1,1)),VALUE(LEFT(A1,FIND("day",A1,1)-1))+1&"days",1&"day"))

我使用 12 小时作为增加 1 天的限制,您可以根据需要进行更改。
无论文本是什么,它都会找到“hr”和“day”并根据它进行计算。此外,以与文本中相同的方式写入 hr 和 day(在公式中),以便让公式找到它。

在此处输入图片描述

答案2

这似乎有点过头了,但是您可以使用用户定义函数,这是代码:

Public Function toDays(datestring As String)
    Dim datearray() As String
    datearray = Split(datestring, " ")
    totaldays = 0
    totalhours = 0
    totalmin = 0
    totalsecs = 0
    For i = LBound(datearray) To UBound(datearray)
        newdata = datearray(i)
        If IsNumeric(newdata) = True Then
            totaldays = totaldays + newdata
            i = i + 1
        Else
            For j = 1 To Len(newdata)
                m = Mid(newdata, j, 1)
                If IsNumeric(m) = False Then
                    separation = j
                    j = Len(newdata)
                End If
            Next j
            numvalue = Mid(newdata, 1, separation - 1)
            measurevalue = LCase(Mid(newdata, separation))
            Select Case measurevalue
                Case Is = "hr"
                    totalhours = totalhours + numvalue
                Case Is = "m"
                    totalmin = totalmin + numvalue
                Case Is = "s"
                    totalsecs = totalsecs + numvalue
            End Select
        End If
    Next i
    finalresult = Round(totaldays + (totalhours / 24) + (totalmin / 1440) + (totalsecs / 86400))
    toDays = finalresult  & " days"
End Function

打开宏ALT+F11右键单击This Workbook​​并插入新模块。将代码粘贴到屏幕右侧。

现在,如果您的数据在单元格中,A1那么A2您应该在单元格中输入=toDays(A1)

相关内容