excel vba - объединить содержимое двух ячеек с другим - PullRequest
0 голосов
/ 04 мая 2018

У меня есть два столбца, которые мне нужно объединить место в третьем столбце. Я пробовал =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 голосов
/ 04 мая 2018

Вам не нужен VBA для этого!

Вы можете легко преобразовать дату в желаемый формат с помощью TEXT(A1,"yyyy-mm-dd") перед объединением.

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

но тогда у вас есть текст, а не дата / время! Это означает, что вы не можете больше рассчитывать с этой датой.

Так что я предлагаю ...

В столбце 3ʳᵈ используйте формулу =A1+B1, а затем отформатируйте столбец 3ʳᵈ с пользовательским форматом dd-mm-yyyy hh:mm:ss;@, как показано ниже:

enter image description here

Таким образом, в столбце 3ʳᵈ остается дата / время, с помощью которого можно рассчитать.

Объяснение

Так почему же простое добавление =A1+B1 работает здесь?

  • Даты в Excel в основном сохраняются как количество дней с 1900-01-01 (то есть день 1). Так 2018-02-03 - это 43134ᵗʰ день с тех пор.

  • Время в Excel сохраняется как часть 1 день, что означает 01:03:22 это 0,04400463 из 1 день

Таким образом, если мы суммируем оба (значение даты + значение времени): 43134 + 0,0440046 = 43134,0440046 и форматируем это как дату, Excel понимает это как 2018-02-03 01:03:22 (что составляет всего 43134,0440046 дней с момента 1900-01-01 00:00:00).

0 голосов
/ 04 мая 2018

Поскольку оба столбца содержат объекты даты (и времени), вы можете просто суммировать значения. Каждая дата (и время) в Excel преобразуется в число (день = 1, час = 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
0 голосов
/ 04 мая 2018

Перед тем, как конкатенировать, попытайтесь преобразовать его в строку

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

Удачи

...