我有十进制值,后跟一个字母来指示时间单位(小时/分钟)值,如下所示:
- 60m
- 1.5小时
- 15m
- 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",""))
丑陋但有效:
拆分多行以提高可读性:
解释:
我敢肯定有更优雅的方法来解决这个问题......
=IFERROR(VALUE(LEFT(A1,LEN(A1)-1))*60^(FIND(RIGHT(A1,1),"smh")-1),A1)
...从 h、m 和 s 后缀 创建正确的秒数。
... 同样:从 h、m 和 s 后缀
=IFERROR(VALUE(LEFT(A1,LEN(A1)-1))*60^(FIND(RIGHT(A1,1),"smh")-2),A1)
创建正确的分钟数。
由于
IFERROR(...,A1)
A1 中的内容对于纯数字或其他“最后”字符保持不变。不过,您可能需要一个“错误指示器”,
例如
A1
在此处替换为STR(A1)&" has no h/m/s indication."
它是如何工作的:
FIND(RIGHT(...)...)
将 A1 中最右边的字符转换为“索引”-1
或-2
调整它以用于...60^"index"
- 它形成一个常数,用于与VALUE(LEFT(A1,...
- 后缀之前的值相乘。请注意,在公式中创建 'minutes'
60^n
等于1/60
for n=-1
从而形成常数以将 'seconds' 乘以 'minutes'1
for n=0
以保持 'minutes' 与60
n=1
,允许转换小时到分钟。