Преобразование из дд.мм.гггг в дд / мм / гггг - PullRequest
0 голосов
/ 11 апреля 2019

В настоящее время я использую Excel 2010, и у меня есть столбец, содержащий дату в таком формате (дд.мм.гггг).Я хотел бы изменить точки на косую черту (/).Я пытался использовать rng.Cells(1, 6) = WorksheetFunction.Substitute(rng.Cells(1, 6), ". ", "/")

Однако, когда я это делаю, результат, который я получаю, отличается от моей первоначальной даты.Например, 02.11.2011 станет 02.02.2011.

Столбец, содержащий (дд.мм.гггг), имеет формат date

Могу ли я узнать, почему это так или есть другой способ сделать?

Ответы [ 4 ]

0 голосов
/ 20 апреля 2019

Давайте поясним, что в электронной таблице Excel тип данных «дата» сам по себе отсутствует.Подход Excel к датам заключается в сохранении целого числа, которое вы можете выбрать для форматирования даты.Так, например, 43467 - это целое число, представляющее 2 января 2019 года. (А десятичная часть представляет время в течение этого дня, поэтому 43467,333 .. представляет 2 января 2019 года в 8:00 утра.)

Попробуйте ввести дату,затем щелкните правой кнопкой мыши> «Форматировать ячейки», чтобы отформатировать эту ячейку как число, чтобы увидеть, о чем я говорю.

Таким же образом вы можете заставить Excel отображать эту ячейку в формате даты, который выхотите использовать тот же метод: выберите ячейку> щелкните правой кнопкой мыши> «Форматировать ячейки», выберите «Пользовательский» и введите произвольный формат, например, dd.mm.yyyy.

Как только вы увидите, что это работает, оставшаяся задача состоит в том, чтобы просто выполнить то же самое действие из VBA, которое будет с оператором вроде:

Range ("B1"). NumberFormat = "dd.mm.yyyy "

... как указано другими.

Теперь, если ваша первоначальная попытка заставить Excel отформатировать ячейку даты как число не удалась (она сохраняет свою датупоявление), тогда дата, которую вы видите в ячейке, фактически сохраняется как строка и не будет функционировать как дата (например, для арифметики даты).Поэтому вам нужно решить, как поступить - возможно, преобразовать эти строки в «даты» (т. Е. В числа, отформатированные как даты).

0 голосов
/ 11 апреля 2019

Если это фактическое значение даты, используйте NumberFormat

Range("B1").NumberFormat = "d/m/yyyy"
Range("B2").NumberFormat = "m/d/yyyy"
Range("B3").NumberFormat = "m-d-yyyy"
0 голосов
/ 11 апреля 2019

Я использую это

splR = Split(oRange.Value, ".")
If UBound(splR) = 2 Then oRange.Value = Format(DateSerial(splR(2), splR(1), splR(0)), RegionalDateFormat) Else oRange.Value = oRange.Value

Function RegionalDateFormat(Optional outS As String)
    Dim DateOrder As String
    Dim DateSeparator As String

With Application
    DateSeparator = .International(xlDateSeparator)
    Select Case .International(xlDateOrder)
        Case Is = 0
            DateOrder = "mm" & DateSeparator & "dd" & DateSeparator & "yyyy"
        Case Is = 1
            DateOrder = "dd" & DateSeparator & "mm" & DateSeparator & "yyyy"
        Case Is = 2
            DateOrder = "yyyy" & DateSeparator & "mm" & DateSeparator & "dd"
        Case Else
            DateOrder = "Error"
    End Select


End With
If outS = "Sep" Then outputS = DateSeparator Else outputS = DateOrder
RegionalDateFormat = outputS

End Function
0 голосов
/ 11 апреля 2019

Столбец отформатирован как дата? Если это так, вы можете попробовать

rng.Cells(1, 6) = Format(CDate(rng.Cells(1, 6)), "dd/MM/yyyy")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...