连接日期列和时间列

时间:2017-02-07 18:27:07

标签: excel-vba vba excel

我试图合并来自日期列和时间列的数据。我使用以下代码:

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

时间变成小数,无法转换回时间。在连接函数之前,日期列的格式为日期,时间列格式化为时间。

请帮忙。

2 个答案:

答案 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将很难将其视为其他任何东西。)