【问题标题】:Convert String To Time Duration In Excel In Any Of The Different Formats [duplicate]以任何不同格式将字符串转换为Excel中的持续时间[重复]
【发布时间】:2016-05-10 02:50:44
【问题描述】:

我在here上问过类似的问题,回答准确高效,但只有输入为时才有效

` 1 小时 1 米 1 秒

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

问题的解决方案

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

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

我的问题如下:

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

  1. 1 小时 48 米 5 秒1:48:05
  2. 48 m 5 s0: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

它会导致错误。

结果应遵循以下测试用例

【问题讨论】:

  • 那么链接的答案如何不适用于您作为示例提供的情况 1?
  • 除了'提出了类似的问题',您能否展示您为解决问题所做的任何原创努力(成功与否)?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    假设您的时间字符串在单元格 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 在哪里,然后在该开始拉字符的左侧 3 个字符,长度为 2。这将导致分钟数,如图所示下面的公式。它还包含用于 M 检查的 IF 函数,如果找不到则返回 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 作为您的格式。

    概念证明

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

    【讨论】:

    • 感谢您的详细解释。使用替代的替代公式正在我身边工作。感谢您的回答:-)
    【解决方案3】:

    把这个标准公式放在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 )。填写。

    【讨论】:

    • 嗨 Jeeped,如果输入是 1 h 33 s,结果是 1:33:33 并且不准确
    • 这不符合您的示例数据格式。应该是1 h 0 m 33 s。如果您只想编造不适合代码的内容,请提供一整套示例数据以及您期望达到的预期结果。
    • 样本数据已上传。谢谢
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多