在Excel中以任何不同格式转换字符串到时间持续时间

时间:2016-05-10 02:50:44

标签: excel excel-formula excel-2010 excel-2007 excel-2013

Previous asked question

我在here上提出了类似的问题,答案是准确有效的,但只有在输入

时才有效
  

`   1小时1分1秒

格式。如果是其他格式,则会导致错误。

问题的解决方案

  

= VALUE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A5," h ",":")," m ",":")," s",""))

----------------------------------------------- -------------------------------------------------- ------

我的问题如下:

我可以知道将以下输入转换为预期输出的方法吗?

  1. 1小时48分5秒 1:48:05
  2. 48 m 5 s 0:48:05
  3. 5 s 0:0:05
  4. 1小时5秒 1:0:5
  5. h m s 0:0:0 格式的其他组合
  6. 提前致谢

    基于两个公式

      

    = SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(ISNUMBER(SEARCH(“m”,S32)),IF(ISNUMBER(SEARCH(“h”,S32)),“”,“0h”),“0h0m” “)及S32,”   ”, “”), “M”, “:”), “H”, “:”), “S”, “”)* 1

      

    =(IF(ISERROR(SEARCH( “H”,A1)), “0:”, “”)及IF(ISERROR(SEARCH( “米”,A1)), “0:” “” )及SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1, “H”, “:”), “M”, “:”), “S”, “”))+ 0

    如果输入是

      

    1 h 5 s

    它会导致错误。

    结果应遵循下面的测试用例

    Test Case

3 个答案:

答案 0 :(得分:1)

简单的方法是添加缺少的部分,如:

=(IF(ISERROR(SEARCH("h",A1)),"0:","")&IF(ISERROR(SEARCH("m",A1)),"0:","")&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"h",":"),"m",":"),"s",""))+0

然后直接格式化它,看起来你想要它......

答案 1 :(得分:1)

我不知道这个答案是否与您之前收到的答案相似,但是在这里答案。

让我们假设你的时间字符串在单元格S32中。您需要编辑公式以适合您的位置。

我们需要TIME函数,它需要传递三个参数:

TIME(ARG1, ARG2, ARG3)
  • ARG1是表示小时数的整数
  • ARG2是表示分钟数的整数
  • ARG3是表示秒数的数字

要确定小时数,请检查源小区中是否有h。这可以通过SEARCH或FIND功能完成。如果找到搜索到的字符串,它们将返回一个数字,如果不是,则返回错误。我们可以使用ISNUMBER函数来确定是否找到了H.

ISNUMBER(SEARCH("h",S2))

将需要IF函数来确定将使用小时的值。上述公式的检查将是决定因素。如果h在那里,我们可以使用LEFT函数获取LEFT 2个字符并获得小时数。如果没有找到H,那么我们将使用0,因为没有时间。

IF(ISNUMBER(SEARCH("h",S2)),LEFT(S32,2),0)

所以现在你已经退出了工作时间,或者确定0如果没有时间。我们可以在几分钟内应用相同的流程。不同之处在于我们无法使用LEFT功能。而是使用MID功能。

在m确定m与搜索功能的位置的情况下,那个开始拉动字符的长度为2的左边的3个字符。这将导致在此显示的分钟数公式如下。它还包含用于M检查的IF函数,如果未找到则返回0。

IF(ISNUMBER(SEARCH("m",S32)),TRIM(MID(S32,SEARCH("m",S32)-3,2)))

现在假设你的等式中总是存在s,可以通过取最后4个字符,然后从所选择的前2个字符中确定秒数。这是通过嵌套的LEFT和RIGHT函数完成的,如下所示:

LEFT(RIGHT(S32,4),2)

现在因为我们已经将数字拉了几个小时几分钟,所以通过方程式可以用作时间函数中的参数,如下所示:

=TIME(IF(ISNUMBER(SEARCH("h",S32)),TRIM(LEFT(S32,2)),0),IF(ISNUMBER(SEARCH("m",S32)),TRIM(MID(S32,SEARCH("m",S32)-3,2))),LEFT(RIGHT(S32,4),2))

使用替代的替代公式:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(IF(ISNUMBER(SEARCH("m",S32)),IF(ISNUMBER(SEARCH("h",S32)),"","0h"),"0h0m")&S32," ",""),"m",":"),"h",":"),"s","")*1

无论您的公式选择如何,最后一步是将单元格格式设置为您想要的预设时间,或者以自定义格式将其设置为h:m:ss。您的示例不会在小时或分钟前显示前导零,但会显示前一个自定义格式将提供的秒数。如果您希望对格式更加一致,并且只为单个数字时提供分钟和小时的前导零,请选择hh:mm:ss作为格式。

概念证明

Proof of Concept

Dirk的公式包含在图像中,以显示其工作原理。关于如何转换的许多选项。

答案 2 :(得分:1)

将此标准公式放入B2,

=IFERROR(IF(ISNUMBER(SEARCH("h", A2)), TIME(--LEFT(A2, 2), --MID(A2, FIND("h", A2)+1, 3), --MID(A2, LEN(A2)-3, 2)),
         IF(ISNUMBER(SEARCH("m", A2)), TIME(0, --LEFT(A2, 2), --MID(A2, LEN(A2)-3, 2)),
         IF(ISNUMBER(SEARCH("s", A2)), TIME(0, 0, --LEFT(A2, 2)), ""))), "")

格式为时间(例如h:mm:ss)。填写。

enter image description here