如何从导出的班次数据字符串中提取hh:mm-hh:mm格式的起止时间
高效提取班次时间的Excel解决方案
方法1:Excel 365/2021专属:TEXTBEFORE/TEXTAFTER组合(最简便)
假设数据在A1单元格,直接用文本拆分函数定位时间,再转成标准格式:
=TEXT(VALUE(TEXTBEFORE(TEXTAFTER(A1," ",3)," ")),"hh:mm")&"-"&TEXT(VALUE(TEXTBEFORE(TEXTAFTER(A1,"-",2)," ")),"hh:mm")
逻辑拆解:
TEXTAFTER(A1," ",3):捞取第一个日期后的片段(例:9:30 AM-09/08/2022 6:00 PM)TEXTBEFORE(..., " "):拆分出开始时间文本(例:9:30 AM)VALUE()+TEXT(..., "hh:mm"):把文本时间转成24小时制的hh:mm格式- 后半段用同样逻辑提取结束时间,最后用
&"-"拼接
方法2:兼容多版本:FILTERXML函数
通过构造XML节点批量提取目标内容:
=TEXT(VALUE(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"-","</s><s>")," ","</s><s>")&"</s></t>","//s[4]")),"hh:mm")&"-"&TEXT(VALUE(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"-","</s><s>")," ","</s><s>")&"</s></t>","//s[7]")),"hh:mm")
逻辑拆解:
- 两次
SUBSTITUTE把空格和连字符替换成XML节点分隔符,将整段文本拆成节点列表 //s[4]定位第4个节点(开始时间文本),//s[7]定位第7个节点(结束时间文本)- 后续格式转换同方法1
方法3:批量处理首选:Power Query
数据量大时用Power Query一键批量提取:
- 选中数据列,点击数据→从表格/区域,导入Power Query编辑器
- 点击添加列→自定义列,输入公式:
let splitText = Text.Split([Column1], " "), startTime = Text.From(Time.FromText(splitText{3})), endTime = Text.From(Time.FromText(splitText{6})) in startTime & "-" & endTime - 点击关闭并上载,直接得到批量处理后的结果
方法4:重复使用自定义:VBA函数
需要反复调用时,写个简单的VBA自定义函数:
- 按
Alt+F11打开VBA编辑器,插入新模块 - 粘贴代码:
Function GetShiftTime(cell As Range) As String Dim arr() As String arr = Split(cell.Value, " ") GetShiftTime = Format(TimeValue(arr(3)), "hh:mm") & "-" & Format(TimeValue(arr(6)), "hh:mm") End Function - 返回Excel,在单元格输入
=GetShiftTime(A1)即可提取时间
内容的提问来源于stack exchange,提问作者ChuckJ
相关产品推荐
相关产品推荐

