VBA - Изменить дату в Excel с datetime на mm / dd / yy (изменить на строковый тип данных, а не только на косметический формат) - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь заполнить дату из источника данных, в котором дата отформатирована как datetime. Файл назначения может принимать только формат mm/dd/yy для загрузки в нашу систему, но все, что я пробую, это либо только косметически форматирует дату ( т.е. datetime все еще отображается в строке формул ), либо преобразует данные до m/d/yyyy, которые также не будут работать.

Вот то, что я попробовал, но безуспешно:

Через VBA (только косметически меняет формат):

[T:T].Select
With Selection
    .NumberFormat = "mm/dd/yy"
    .Value = .Value
End With

Использование VBA для создания временного вспомогательного столбца U по следующей формуле (переводит меня в m / d / yyyy:

=MONTH(T2)&"/"&DAY(T2)&"/"&YEAR(T2)

Я знаю, что могу создать кучу условных утверждений, чтобы заставить работать вышеперечисленное, но мне было любопытно, если бы был менее запутанный способ решения, казалось бы, очень простой проблемы.

Редактировать: Для ясности, результат, скорее всего, нужно будет сохранить в виде строки.

Ответы [ 4 ]

0 голосов
/ 10 января 2019

По совету Скотта Крэйнера, следующий цикл работал отлично!

For i = 2 To LastRow
    Range("T" & i).NumberFormat = "@" 'Format as text to prevent excel from taking over
    Range("T" & i) = Format(Range("T" & i), "mm/dd/yy")
Next i
0 голосов
/ 10 января 2019

Попробуйте

Sub test()
    Dim rngDB As Range
    Dim vDB
    Dim i As Long, r As Long

    Set rngDB = Range("t1", Range("t" & Rows.Count).End(xlUp))
    vDB = rngDB
    r = UBound(vDB, 1)
    For i = 1 To r
        vDB(i, 1) = Format(vDB(i, 1), "mm/dd/yy")
        vDB(i, 1) = Replace(vDB(i, 1), "-", "/")
    Next i
    rngDB.NumberFormatLocal = "@"
    rngDB = vDB
End Sub
0 голосов
/ 10 января 2019

Попробуйте перевести NumberFormat в текст. Вот пример.

Option Explicit

Sub SetDateTime()
  Dim lngRow As Long
  For lngRow = 1 To 10
    Cells(lngRow, 20).Value = Now
  Next lngRow
End Sub

Sub ReformatDate()
  Dim lngRow As Long
  Dim datX As Date
  Dim strX As String

  For lngRow = 1 To 10
    strX = Cells(lngRow, 20).Value
    If IsDate(strX) Then
      datX = CDate(strX)
      Cells(lngRow, 20).NumberFormat = "@"
      Cells(lngRow, 20).Value = Format(datX, "mm/dd/yy")
    End If
  Next lngRow
End Sub
0 голосов
/ 10 января 2019

Чтобы преобразовать ваши даты в текст, вы можете сделать это следующим образом.

Sub TestIt()

Dim rg As Range
Dim sngcell As Range
Dim vdat As Variant

    Set rg = Range("A1:A3")

    For Each sngcell In rg
        sngcell.Value2 = sngcell.Text
    Next

    ' check in Debugger the contents
    vdat = WorksheetFunction.Transpose(rg)    

End Sub

Просто заранее убедитесь, что формат правильный.

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