将字符串转换为 Excel 中任何不同格式的持续时间

Convert String To Time Duration In Excel In Any Of The Different Formats

我在上问过类似的问题,答案准确高效,但只有在输入

时才有效

` 1 h 1 m 1 s

格式。如果是其他格式,会报错。

问题的答案

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

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

我的问题如下:

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

  1. 1 小时 48 米 5 秒1:48:05
  2. 48 米 5 秒0:48:05
  3. 5秒0:0:05
  4. 1 小时 5 秒1:0:5
  5. h m s0:0:0格式的其他组合

提前致谢


基于两个公式

= 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("m",A1)),"0:","")&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"h",":"),"m",":"),"s",""))+0

如果输入是

1 h 5 s

它会导致错误。

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

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

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

然后直接格式化成你想要的样子...

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

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

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

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

为了确定小时数,请检查源单元格中是否有 h。这可以通过 SEARCH 或 FIND 功能来完成。如果找到搜索到的字符串,它们将 return 一个数字,否则将 return 一个错误。我们可以使用 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在哪里,然后从那个左边的3个字符开始拉字符长度为2。这将导致分钟数显示在下面的这个公式中。它还包含用于 M 检查的 IF 函数,如果未找到则 returning 0。

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

现在假设你的方程中总是有 s,可以通过取最后 4 个字符,然后取所选 for 的前 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 作为您的格式。

概念验证

图像中包含德克的公式以显示其工作原理。关于如何转换的很多选项。

把这个标准公式放到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 )。往下填。