我需要从 Excel 单元格中的文本获取时间。文本包含工单号、工单标题、时间日志和百分比。所有这些都在一个单元格中。参见下面的示例:
12345678: The bottom part is incorrect 0:15h 0%
我需要获取0:15
。我尝试使用 LEFT 和 RIGHT 函数组合,但只有当最后一句的百分比只有 1 位数字时,它才会起作用。百分比从 0% 到 100% 不等。票证标题的长度也不同。
答案1
答案2
Máté Juhász 的答案无疑是最简单的。但是,如果您不想获得该插件并且不熟悉正则表达式(并且不想学习),那么可以使用内置函数以更复杂的方式获取结果。如果您使用辅助列来避免重复,则可以简化一些。我将用它来解释它的工作原理。
所有“单词”都用空格分隔。票证标题的单词数可以不定。最后一个元素(百分比)位于最后一个空格之后,时间位于倒数第二个空格之后。B 列使用以下公式计算空格数:
=LEN(A1)-LEN(SUBSTITUTE(A1," ",""))
此公式的工作原理是消除所有空格,然后计算缩短字符串的字符数。在示例中,有 7 个空格。
C 列从时间开始剥离字符串末尾。公式为:
=MID(A1,FIND(CHAR(1),SUBSTITUTE(A1," ",CHAR(1),B1-1))+1,LEN(A1))
其工作原理是使用 SUBSTITUTE 功能(允许您指定要替换的特定实例)用数据中未出现的任意目标字符(本例中为 CHAR(1))替换时间之前的空格(即倒数第二个空格)。然后,FIND 会定位该字符的位置,MID 会从下一个位置开始提取字符串的其余部分。
D 列中的结果使用以下公式提取时间:
=LEFT(C1,FIND("h",C1)-1)
它的工作原理是找到“h”并提取其之前的所有内容。
您可以在单个公式中执行此操作,而无需使用辅助列。如果您用辅助单元格公式替换辅助单元格引用,则该公式将如下所示:
=LEFT(MID(A1,FIND(CHAR(1),SUBSTITUTE(A1," ",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1," ",""))-1))+1,LEN(A1)),FIND("h",MID(A1,FIND(CHAR(1),SUBSTITUTE(A1," ",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1," ",""))-1))+1,LEN(A1)))-1)
请注意,所有这些都假设数据干净且没有尾随空格。如果可能存在尾随空格,请使用 TRIM() 包装对 A1 的所有引用,或者将 A1 修剪到辅助列中并引用该列以避免重复。
答案3
尝试以下公式:
=TRIM(RIGHT(TRIM(LEFT(SUBSTITUTE(TRIM(E10);"h ";REPT(" ";99));99));5))