VBA объединяет дату и текст - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь объединить столбцы B и C в столбец O.

Код, который у меня есть, таков. Код дает сумму значения, а не дату. Любая помощь будет оценена.

Sub ConcatJEcomment()

  Dim LastRow As Long
  LastRow = Cells(Rows.Count, "A").End(xlUp).Row
  Range("O2:O" & LastRow) = Evaluate(Replace("B2:B#&"" - ""&C2:C#", "#", LastRow))
  'You want to pull date and Type -- in this order
  'Range = where do you want this to be put

End Sub

spreadsheet screenshot

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

TEXT & ARRAY

Однострочник? Неа!

Формула Excel

=TEXT(B2,"MM/DD/YYYY")&" - "&C2

работает просто отлично.

Я был удивлен, что начальная VBA формула

Range("O2:O" & LastRow) = Evaluate(Replace("B2:B#&"" - ""&C2:C#", "#", LastRow))

будет даже работать. Итак, следуя его логике, я пришел к выводу:

Range("O2:O" & LastRow) = Evaluate( _
    Replace("TEXT(B2:B#,""MM/DD/YYYY"")&"" - ""&C2:C#", "#", LastRow))

Это не работает, похоже, что функция TEXT не любит массивы. Результатом всегда являются объединенные значения из строки second (первая строка данных).

Решение

Вы всегда можете просмотреть диапазон:

Sub ConcatJEcomment()

  Dim LastRow As Long
  Dim lngRow As Long ' Row Counter
  LastRow = Cells(Rows.Count, "A").End(xlUp).Row

  For lngRow = 2 To LastRow
    Range("O" & lngRow) = Range("B" & lngRow).Text _
        & " - " & Range("C" & lngRow).Text
  Next

End Sub

Еще одна проблема

Так как моя система использует '. ' вместо ' / ' в качестве разделителя даты, я хотел показать результат с косой чертой:

    Range("O" & lngRow) = Format(Range("B" & lngRow), "MM/DD/YYYY") _
        & " - " & Range("C" & lngRow).Text

Формула Excel сделала это без проблем, но здесь Не работает . Никаких косых черт !?

Обходной путь будет:

    Range("O" & lngRow) = Replace(Format(Range("B" & lngRow), "MM/DD/YYYY"), _
        ".", "/") & " - " & Range("C" & lngRow).Text

Надеюсь, кто-нибудь найдет однострочник.

0 голосов
/ 17 ноября 2018

Попробуйте это:

Range("O2:O" & LastRow) = Format(Cells(LastRow, 2).Value,"mm/dd/yyyy") & " - " & Cells(LastRow,3)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...