我有十进制值后跟一个字母来表示时间单位(小时/分钟)值,如下所示:
- 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 中的内容对于纯数字或其他“最后”字符保持不变。
不过,您可能需要一个“错误指示器”,
例如在此处替换A1
为STR(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= 的“分钟”不变,从而允许将小时转换为分钟。
1
0
60
1