Приведение данных, содержащих дату, к стандартному виду ?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
postrelll
Сообщения: 1
Зарегистрирован: 14 мар 2011, 13:04

Дорогие форумчане, прошу помощи в следующем:
Допустим есть ячейка с датой, но дата может быть написана следующими способами:
1. 01.01.2011
2. 01_01_2011
3. 01,01,2011
4. 01 01 2011
5. 01.01.11
6. 01_01_11
7. 01,01,11
8. 01 01 11

Подскажите, пожалуйста, возможно кому-то подобную проблему уже доводилось решать, как можно привести все эти способы к единому? Возможно есть какая-то стандартная функция?
Пока что первое (правда самое простое), что приходит на ум - использовать Replace() и заменять указанные по номеру символы

Заранее благодарен
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

postrelll
Возможно есть какая-то стандартная функция?
Есть функция CDate(). Но она понимает не все разделители. Так, среди указанных разделителей в Вашем примере, это символ подчеркивания.
Пусть, например, требуется перевести в формат "Дата" данные, находящиеся в диапазоне "A1:A8".
Для этого, можно использовать макрос:

Код: Выделить всё

Sub Main()
    Dim x As Range, i As Long, a()
    Set x = [A1:A8]: a = x.Value
    x.NumberFormat = "m/d/yyyy": On Error Resume Next
    For i = 1 To UBound(a, 1)
        a(i, 1) = CDate(Replace(a(i, 1), "_", "."))
    Next: x.Value = a
End Sub
Подставьте требуемый диапазон (либо Selection). В случае, если в заданном диапазоне встретится значение, которое невозможно преобразовать в формат "Дата", то оно останется "как есть". Ошибка игнорируется.
Ответить