excel vba - 将两个单元格的内容连接到另一个单元格

时间:2018-05-04 04:49:50

标签: excel vba excel-vba excel-formula concatenation

我需要两列来组合第三列中的位置。我试过=CONCATENATE(A1," ", B1),但结果是错误的(它变成了一个整数)。另外,我需要在vba代码中使用它,因为我正在尝试自动化某些东西。

Column A   | Column B | 3rd column Desired result
2018-02-03 | 01:03:22 | 2018-02-03 01:03:22
2018-01-01 | 13:44:22 | 2018-01-01 13:44:22
2018-04-11 | 20:44:43 | 2018-04-11 20:44:43

3 个答案:

答案 0 :(得分:2)

你不需要VBA!

在连接之前,您可以使用TEXT(A1,"yyyy-mm-dd")轻松地将日期转换为所需的格式。

=CONCATENATE(TEXT(A1,"yyyy-mm-dd")," ", TEXT(B1,"yyyy-mm-dd"))

然后你将它作为文本而不是日期/时间了!这意味着您无法再计算该日期。

所以我建议......

在3ʳᵈ列中使用公式=A1+B1,然后使用自定义格式dd-mm-yyyy hh:mm:ss;@格式化3ʳᵈ列,如下所示:

enter image description here

这样,3ʳᵈ列仍然是您可以使用的计算日期/时间。

解释

那么为什么简单地添加=A1+B1呢?

  • Excel中的日期基本上保存为1900-01-01(日1)后的天数。所以2018-02-03是自那时起的43134ᵗʰ日。

  • Excel中的时间将保存为1天的一部分,这意味着01:03:220,04400463天的1

因此,如果我们将两者(日期值+时间值):43134 + 0,0440046 = 43134,0440046相加并将其格式化为日期,Excel会将其理解为2018-02-03 01:03:22(距43134,04400461900-01-01 00:00:00天1}})。

答案 1 :(得分:0)

在concantenate之前,您应该尝试将其转换为字符串

Sub test()
Dim s, ss, sss As String

s = Me.Range("H10").Value
ss = CStr(Me.Range("I10").Value)

Me.Range("J10").Value = s & ss

End Sub
祝你好运

答案 2 :(得分:0)

由于两列都包含日期(和时间)对象,因此您可以简单地对这些值求和。 Excel中的每个日期(和时间)都将转换为数字(day = 1,hour = 1/24)。要使用VBA完成任务:

Sub add_dates()
   ' loop over non-empty cells at 1st column
   i = 2
   Do While Cells(i, 1) <> ""
      Cells(i, 3) = Cells(i, 1) + Cells(i, 2)
      i = i + 1
   Loop

    ' Format range if necessary
    Range("C:C").NumberFormat = "dd-mm-yyyy hh:mm:ss;@"
End Sub
相关问题