如何去除时间字符串括号以适配Excel UDF格式需求
解决Excel UDF处理带括号时间字符串的问题
方案1:不修改现有UDF,用工作表函数预处理输入
不用改动你的UDF代码,直接在调用时通过Excel内置函数去除括号,完全保留源数据。
假设源数据存于单元格A1,调用UDF时可使用以下两种写法:
- 用
SUBSTITUTE替换左右括号:=TimeMark(SUBSTITUTE(SUBSTITUTE(A1,"(", ""),")",""), 你的延迟值) - 用
MID截取中间有效时间字符串(效率更高):=TimeMark(MID(A1,2,LEN(A1)-2), 你的延迟值)
两种写法都能在不修改A1源数据的前提下,将不带括号的时间传递给TimeMark函数。
方案2:修改UDF,让它直接支持带括号的输入
如果不想每次调用都额外写预处理函数,可以直接修改UDF代码,让它自动处理带括号的输入,调整后代码如下:
Function TimeMark(xtime, delay) Dim H As Integer, M As Integer, S As Integer, D As Integer, Mon As Integer, Y As Integer ' 新增:处理带括号的字符串输入 If TypeName(xtime) = "String" Then ' 去掉左右括号并清理空格 xtime = Trim(Replace(Replace(xtime, "(", ""), ")", "")) End If ' 转换为日期时间类型,确保后续计算正常 xtime = CDate(xtime) xtime = xtime + delay / 24 S = 0 M = 0 H = Hour(xtime) D = Day(xtime) Mon = Month(xtime) Y = Year(xtime) TimeMark = TimeSerial(H, M, S) + DateSerial(Y, Mon, D) End Function
修改后,直接用=TimeMark(A1, 你的延迟值)就能处理带括号的源数据,源数据无需任何修改。
补充说明:你的UDF核心作用是将传入的时间分、秒清零,再加上指定的延迟小时数(delay参数代表小时数,因Excel中1天=1,所以除以24转换为天数),最终返回日期加整小时的时间值。
内容的提问来源于stack exchange,提问作者henz
相关产品推荐
相关产品推荐

