Страницы: 1
RSS
Изменение формата даты из ДД.ММ.ГГГГ ЧЧ:ММ:СС на [$-ru-RU]d mmm yy;@
 
Доброго времени суток!

Уверен, что моя проблема довольно простая, но уже изрыл все просторы интернета и не нашёл никакого адекватного решения. Проблема вот в чём: В таблице есть столбец, в котором даты выкачены из базы данных в формате ДД.ММ.ГГГГ ЧЧ:ММ:СС. Мне же нужно с помощью макроса перевести все ячейки в конкретно выбранном активном столбце (пока не встретиться пустая ячейка) в формат [$-ru-RU]d mmm yy;@.
Например: "02.06.2015 09:02:21" должно превратиться в формат "2 июн 2015".
Я с помощью костылей научился проворачивать это с одной выбранной ячейкой:
Код
    ActiveCell.Select
    SendKeys "{F2} + {ENTER}", True
    Selection.NumberFormat = "[$-ru-RU]d mmm yy;@"
    With Selection
    .HorizontalAlignment = xlRight
    End With

Но у меня больше 30000 записей. Помогите с написанием адекватного цикла, прошу(

P.S. Работаю с VBA впервые, поэтому прошу прощения, если ответ уже есть, а я просто неправильно формулировал свой вопрос.
 
Доброе время суток.
Цитата
EVGENY BELENKOV написал:
в конкретно выбранном активном столбце
EVGENY BELENKOV, пока вы не проучили concepts and definitions (нет такого понятия активный столбец - только активная ячейка), лучше прикладывать пример, как это рекомендуют правила.
Цитата
2.3. Приложите файл(ы) с примером (общим весом не более 300Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
 
Прошу прощения за свою безграмотность
Вот пример. Первый столбец - формат, который необходимо получить. Второй - первоначальные данные.
 
Будем отталкиваться от выделенного диапазона значений. В вашем примере выделяем диапазон B2:B14
Код
Public Sub SetCustomDateFormatInSelection()
    Dim vData As Variant, i As Long, vLastDateId As Long
    vData = Selection.Value
    For i = 1 To UBound(vData)
        If IsEmpty(vData(i, 1)) Then
            vLastDateId = i - 1
            Exit For
        End If
    Next
    
    If vLastDateId > 0 Then
        For i = 1 To vLastDateId
            vData(i, 1) = CDate(vData(i, 1))
        Next
        Selection.Value = vData
        ActiveSheet.Range( _
            ActiveSheet.Cells(Selection.Row, Selection.Column), _
            ActiveSheet.Cells(Selection.Row + vLastDateId - 1, Selection.Column) _
        ).NumberFormat = "[$-ru-RU]d mmm yy;@"
    End If
End Sub
 
Спасибо большое за оперативный ответ! Правда у меня всё же ничего не произошло при выполнении макроса в выбранном диапазоне(
Попробую пока изучать ваш код, понять что я делаю не так.
 
Цитата
Dab Dab написал:
у меня всё же ничего не произошло
Естественно, в вашем примере нет выполнения условия
Цитата
EVGENY BELENKOV написал:
(пока не встретиться пустая ячейка)
Чётче и однозначнее артикулируйте условия :)  Чуть изменил
Код
Public Sub SetCustomDateFormatInSelection()
    Dim vData As Variant, i As Long, vLastDateId As Long
    vData = Selection.Value
    vLastDateId = UBound(vData)
    For i = 1 To UBound(vData)
        If IsEmpty(vData(i, 1)) Then
            vLastDateId = i - 1
            Exit For
        Else
            vData(i, 1) = CDate(vData(i, 1))
        End If
    Next
     
    Selection.Value = vData
    ActiveSheet.Range( _
        ActiveSheet.Cells(Selection.Row, Selection.Column), _
        ActiveSheet.Cells(Selection.Row + vLastDateId - 1, Selection.Column) _
    ).NumberFormat = "[$-ru-RU]d mmm yy;@"
End Sub
 
Не передать, как сильно я вам благодарен! Спасибо огромное, заработало)
 
Цитата
"02.06.2015 09:02:21" должно превратиться в формат "2 июн 2015"
Код
Sub iData()
Dim i As Long
Dim iLastRow As Long
 iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
  For i = 2 To iLastRow
    Cells(i, "C") = CDate(Split(Cells(i, "B"), " ")(0))
    Cells(i, "C").NumberFormat = "[$-419]d mmm yyyy;@"
  Next
End Sub

Результат в столбце С
Страницы: 1
Наверх