我试图合并来自日期列和时间列的数据。我使用以下代码:
Sub Concat()
Dim lRow As Long
lRow = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To lRow
Cells(i, 10) = Cells(i, 6) & " " & Cells(i, 7)
Cells(i, 11) = Cells(i, 8) & " " & Cells(i, 9)
Next I
Cells(1, 9).Copy
Cells(1, 10).PasteSpecial Paste:=xlPasteFormats
Cells(1, 11).PasteSpecial Paste:=xlPasteFormats
Cells(1, 10) = "Request Time"
Cells(1, 11) = "Validation Time"
End Sub
我得到的结果是:
Input data:
Creation_Date Creation Time Change Date Change Time Request Time Validation Time
01/23/2017 8:20:10 01/23/2017 8:20:10 1/23/2017 0.347337962962963 1/23/2017 0.347337962962963
时间变成小数,无法转换回时间。在连接函数之前,日期列的格式为日期,时间列格式化为时间。
请帮忙。
答案 0 :(得分:0)
日期/时间格式的基础数据类型很可能是64位浮动。我建议在连接之前将值转换为String,然后应用datetime格式。
答案 1 :(得分:0)
您可以按如下方式更改循环:
For i = 2 To lRow
Cells(i, 10) = Cells(i, 6) + Cells(i, 7)
Cells(i, 11) = Cells(i, 8) + Cells(i, 9)
Cells(i, 10).NumberFormat = "m/dd/yyyy h:mm:ss"
Cells(i, 11).NumberFormat = "m/dd/yyyy h:mm:ss"
Next I
当然,J&列的格式化K可以在Excel中完成,而不是在代码中完成,如果这对您来说更容易。
重要的是只添加日期和时间,而不是尝试创建一个连接在一起的值的字符串。 (时间8:20:10
只是一个等于8/24 + 20/24/60 + 10/24/60/60的数字,即0.347337962962963
,这就是创建结果字符串的原因作为1/23/2017 0.347337962962963
,一旦它是一个字符串,那么Excel将很难将其视为其他任何东西。)