如何将带有字母后缀的时间值(如(30m,2h,30s))转换为实际时间格式?

如何将带有字母后缀的时间值(如(30m,2h,30s))转换为实际时间格式?

我有十进制值后跟一个字母来表示时间单位(小时/分钟)值,如下所示:

  • 60 分钟
  • 1.5小时
  • 15 分钟
  • 20 小时

我如何将它们转换为分钟或时间值的数值?换句话说,上述单元格将变成:

  • 60
  • 90
  • 15
  • 1200

我从这里找到了以下公式:https://www.reddit.com/r/excel/comments/o0bxvl/formula_to_convert_time_in_text_like_2h_15m_or/

=IF(ISERR(FIND(" ",B2)), LEFT(B2,FIND("m",B2)-1)/(60*24), LEFT(B2,FIND("h",B2)-1)/24+MID(B2,FIND(" ",B2)+1,FIND("m",B2)-FIND(" ",B2)-1)/(24*60))

然而,这对我来说似乎不起作用 - 我假设是因为我有像这样的价值观1h而不是1h 0m......


为了解决这个问题,我一直在尝试使用该REGEX函数,但我放弃了,因为解决这个问题花了太长时间,如果它对将来的任何人都有帮助,我正在部分尝试使用正则表达式/函数:=(REGEX(E2,"(\d+)m|.*","$1",""))

答案1

丑陋但有效:

=IF(ISERR(FIND("h";A1));VALUE(LEFT(A1;FIND("m";A1) -1));VALUE(LEFT(A1;FIND("h";A1)-1))*60)

为了便于阅读,分成多行:

=IF(
    ISERR(
        FIND("h";A1)
    );
    VALUE(
        LEFT(A1;FIND("m";A1)-1)
    );
    VALUE(
        LEFT(A1;FIND("h";A1)-1)
    )*60
)

解释:

  • 检查是否有分钟或小时(对 FIND() 的结果使用 ISERR);
  • 如果我们有会议纪要:只需取单元格内容的数值,去掉最后一个字符。
  • 如果有小时:取单元格内容的值,删除最后一个字符(应该产生数字内容),乘以 60;

我相信有更优雅的方法来解决这个问题......

答案2

=IFERROR(VALUE(LEFT(A1,LEN(A1)-1))*60^(FIND(RIGHT(A1,1),"smh")-1),A1)
... 创建正确的从 h、m 和 s 后缀开始计数。

... 类似地:
=IFERROR(VALUE(LEFT(A1,LEN(A1)-1))*60^(FIND(RIGHT(A1,1),"smh")-2),A1)
创建一个正确的分钟从 h、m 和 s 后缀开始计数。

由于IFERROR(...,A1)A1 中的内容对于纯数字或其他“最后”字符保持不变。
不过,您可能需要一个“错误指示器”,
例如在此处替换A1STR(A1)&" has no h/m/s indication."

怎么运行的:
FIND(RIGHT(...)...)将 A1 中最右边的字符转换为“索引”
-1-2对其进行调整以用于...
60^"index"- 形成一个常数,用于与
VALUE(LEFT(A1,...后缀之前的值相乘。

请注意,在创建“分钟”的公式中
60^n
1/60对于 n=等于,从而形成常数,将n= 的-1“秒”乘以“分钟”,以保持n= 的“分钟”不变,从而允许将小时转换为分钟。
10
601

相关内容