如何在Excel中智能拆分含可变间隔的时间字符串?
Excel 拆分含非ASCII空格的时长字符串方案
针对你遇到的这类带非ASCII空格的时长字符串(如0d__0h__0m、7d_11h_20m,下划线代表非ASCII空格),提供以下几种可行拆分方法:
方法1:使用TEXTBEFORE/TEXTAFTER函数(Excel 365/2021及以上版本)
这类函数能直接按指定字符截取内容,转数字时会自动忽略数字前的非ASCII空格:
- B列(提取天数):
=--TEXTBEFORE(A2, "d") - C列(提取小时数):
=--TEXTBEFORE(TEXTAFTER(A2, "d"), "h") - D列(提取分钟数):
=--TEXTBEFORE(TEXTAFTER(A2, "h"), "m")
注:--的作用是将截取到的文本型数字转换为数值型,方便后续计算。
方法2:替换非ASCII空格后用分列功能
如果你的Excel版本不支持上述函数,可先统一替换非ASCII空格:
- 插入辅助列(比如E列),输入公式替换网页常见的不间断空格:
=SUBSTITUTE(A2, CHAR(160), " ") - 选中E列所有数据,点击「数据」选项卡→「分列」,选择「分隔符号」→下一步,勾选「空格」→完成,此时会得到三列内容(如
7d、11h、20m) - 分别提取数字:比如拆分后的第一列(F列)对应天数,公式为
=--LEFT(F2, LEN(F2)-1),小时和分钟列同理修改单元格引用即可。
方法3:数组公式(适用于旧版Excel)
如果无法使用分列和新函数,可通过数组公式定位数字位置(输入时需按Ctrl+Shift+Enter触发数组计算):
- B列(天数):
=--MID(A2,MIN(IF(ISNUMBER(--MID(A2,ROW($1:$100),1)),ROW($1:$100))),FIND("d",A2)-MIN(IF(ISNUMBER(--MID(A2,ROW($1:$100),1)),ROW($1:$100)))) - C列(小时数):
=--MID(A2,FIND("d",A2)+MIN(IF(ISNUMBER(--MID(A2,ROW(INDIRECT(FIND("d",A2)+1&":"&LEN(A2))),1)),ROW(INDIRECT(FIND("d",A2)+1&":"&LEN(A2))))-FIND("d",A2),FIND("h",A2)-(FIND("d",A2)+MIN(IF(ISNUMBER(--MID(A2,ROW(INDIRECT(FIND("d",A2)+1&":"&LEN(A2))),1)),ROW(INDIRECT(FIND("d",A2)+1&":"&LEN(A2))))-FIND("d",A2)))) - D列(分钟数):
=--MID(A2,FIND("h",A2)+MIN(IF(ISNUMBER(--MID(A2,ROW(INDIRECT(FIND("h",A2)+1&":"&LEN(A2))),1)),ROW(INDIRECT(FIND("h",A2)+1&":"&LEN(A2))))-FIND("h",A2),FIND("m",A2)-(FIND("h",A2)+MIN(IF(ISNUMBER(--MID(A2,ROW(INDIRECT(FIND("h",A2)+1&":"&LEN(A2))),1)),ROW(INDIRECT(FIND("h",A2)+1&":"&LEN(A2))))-FIND("h",A2))))
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

