Excel VBA 如何将AF列分钟数加到L、M列合并生成的日期时间值上
可行解决方案
问题根源
你当前N列通过CONCAT+TEXT生成的是文本型字符串,并非Excel可识别的日期时间序列值,因此DATEADD函数无法直接对该类内容做时间运算。
方案1:修改N列公式生成标准日期时间值(推荐)
Excel中日期存储为整数、时间存储为0-1区间的小数,直接将L列的日期值和M列的时间值相加即可得到标准日期时间,不需要拼接文本,修改N列写入公式的代码为:
Range("N2").Formula = "=L2+M2" ' 自动填充到所有有数据的行(以L列为基准判断行数) Range("N2").AutoFill Destination:=Range("N2:N" & Cells(Rows.Count, "L").End(xlUp).Row)
之后将N列单元格格式设置为mm-dd-yyyy hh:mm即可显示为你需要的格式,此时N列为标准时间值,可直接使用DATEADD加分钟,示例代码:
' 给第2行N列时间加AF2的分钟数,结果写入AG2 Range("AG2").Value = DateAdd("n", Range("AF2").Value, Range("N2").Value) ' 也可以直接写公式批量填充 Range("AG2").Formula = "=DATEADD(""n"",AF2,N2)" Range("AG2").AutoFill Destination:=Range("AG2:AG" & Cells(Rows.Count, "L").End(xlUp).Row)
方案2:不修改现有N列公式,VBA中转换后运算
如果需要保留当前N列的文本拼接公式,可在VBA中先把N列的文本转为日期时间格式再做运算,批量处理示例代码:
Dim lastRow As Long, i As Long Dim oriTime As Date, addMin As Long ' 取有效数据的最大行号(以L列为基准) lastRow = Cells(Rows.Count, "L").End(xlUp).Row ' 循环处理每一行 For i = 2 To lastRow ' 将N列文本转为日期时间格式 oriTime = CDate(Range("N" & i).Text) addMin = Range("AF" & i).Value ' 运算结果写入AG列,可自行修改目标位置 Range("AG" & i).Value = DateAdd("n", addMin, oriTime) Next i
注意事项
- 如果出现类型转换错误,先检查L、M列是否存在空值或者非法日期格式内容
- 结果列建议设置单元格格式为
mm-dd-yyyy hh:mm方便查看
内容的提问来源于stack exchange,提问作者Dani Phinazee
相关产品推荐
相关产品推荐

