Дата - преобразование текста YYYYDM в YYYYDDMM - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть достоверный формат даты конвертации с YYYYDM в YYYYDDMM, например:

  • 200111 в 20010101 или
  • 2001233 в 20012303

… и т. Д.

формат был такой, как 2001/1/1 I удалил /, и теперь я получил 200111, но все равно нужно, чтобы оно было 20010101.Я не могу думать ни о чем.

Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets(2)

Dim k As Long
k = sh.Range("A1", sh.Range("A1").End(xlDown)).Rows.Count

For p = 2 To k
    myString = sh.Cells(p, 1)
    newString = Replace(myString, "/", "")
    sh.Cells(p, 1).Value = newString
Next p

Я был бы очень признателен, если бы у вас, ребята, было какое-то решение для этого.

Ответы [ 2 ]

0 голосов
/ 30 декабря 2018

Плохая форма для добавления второго ответа, но это чисто строковая реализация, а не использование встроенной обработки Excel.Это дополнительное требование упоминается в комментариях выше.

Параметр aDate представляет собой строку в формате "2001/1/1".Результатом функции является «20010101».

Public Function parseDate(aDate As String)

    Dim components() As String

    components = Split(aDate, "/")
    components(0) = Right("0000" & components(0), 4)
    components(1) = Right("00" & components(1), 2)
    components(2) = Right("00" & components(2), 2)
    parseDate = components(0) & components(1) & components(2)

End Function

Проверка этого в IDE VBA:

' Sample date
? parseDate("2001/1/1")
20010101

' Date with multiple digits for month and day
? parseDate("2001/12/31")
20011231

' Invalid date, there is no checking for invalid dates
? parseDate("2001/88/99")
20018899
0 голосов
/ 30 декабря 2018

Как утверждает Эндрю Мортимер, оставьте / в дате и используйте функцию форматирования.

format(datevalue("2001/1/1"),"yyyymmdd")

datevalue используется для преобразования строкового литерала в дату.

? format(datevalue("2001/1/1"),"yyyymmdd")
20010101
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...