Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Преобразовать дату из текстовой строки в DATETIME - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Преобразовать дату из текстовой строки в DATETIME
VirtualMan Дата: Воскресенье, 01.01.2017, 15:05 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Прошу помощи:

В экселе сейчас текстовые поля вместо дат:
1 марта в 19:24
вчера в 09:45
сегодня в 09:45
и т.д.

Как преобразовать в формат YYYY-MM-DD HH:MM:SS, чтобы потом можно было импорт CSV в SQL сделать?

Заранее благодарю!
 
Ответить
СообщениеПрошу помощи:

В экселе сейчас текстовые поля вместо дат:
1 марта в 19:24
вчера в 09:45
сегодня в 09:45
и т.д.

Как преобразовать в формат YYYY-MM-DD HH:MM:SS, чтобы потом можно было импорт CSV в SQL сделать?

Заранее благодарю!

Автор - VirtualMan
Дата добавления - 01.01.2017 в 15:05
Gustav Дата: Воскресенье, 01.01.2017, 21:34 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2843
Репутация: 1194 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Формулами задачу решить, конечно, можно, но они получаются довольно громоздкими. Поэтому предлагаю решать либо вручную (операциями замены), либо с использованием несложного макроса, "документирующего" ручные операции:
[vba]
Код
Sub Макрос1()
    
    'перед запуском выделяем диапазон (с одним столбцом)
    
    With Selection
        'определяем понятия "вчера" и "сегодня"
        .Replace What:="вчера", Replacement:="30 декабрь"
        .Replace "сегодня", "31 декабрь"
        
        'месяцы переводим в именительный падеж
        .Replace "января", "январь"
        .Replace "февраля", "февраль"
        .Replace "марта", "март"
        .Replace "апреля", "апрель"
        .Replace "мая", "май"
        .Replace "июня", "июнь"
        .Replace "июля", "июль"
        .Replace "августа", "август"
        .Replace "сентября", "сентябрь"
        .Replace "октября", "октябрь"
        .Replace "ноября", "ноябрь"
        .Replace "декабря", "декабрь"
        
        'наконец, прописываем год
        .Replace " в ", " 2016 "
        
        'получаем значения в нужном формате в соседнем столбце
        .Offset(0, 1).FormulaR1C1 = "=TEXT(RC[-1], ""ГГГГ-ММ-ДД чч:мм:сс"")"
    End With

End Sub
[/vba]


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеФормулами задачу решить, конечно, можно, но они получаются довольно громоздкими. Поэтому предлагаю решать либо вручную (операциями замены), либо с использованием несложного макроса, "документирующего" ручные операции:
[vba]
Код
Sub Макрос1()
    
    'перед запуском выделяем диапазон (с одним столбцом)
    
    With Selection
        'определяем понятия "вчера" и "сегодня"
        .Replace What:="вчера", Replacement:="30 декабрь"
        .Replace "сегодня", "31 декабрь"
        
        'месяцы переводим в именительный падеж
        .Replace "января", "январь"
        .Replace "февраля", "февраль"
        .Replace "марта", "март"
        .Replace "апреля", "апрель"
        .Replace "мая", "май"
        .Replace "июня", "июнь"
        .Replace "июля", "июль"
        .Replace "августа", "август"
        .Replace "сентября", "сентябрь"
        .Replace "октября", "октябрь"
        .Replace "ноября", "ноябрь"
        .Replace "декабря", "декабрь"
        
        'наконец, прописываем год
        .Replace " в ", " 2016 "
        
        'получаем значения в нужном формате в соседнем столбце
        .Offset(0, 1).FormulaR1C1 = "=TEXT(RC[-1], ""ГГГГ-ММ-ДД чч:мм:сс"")"
    End With

End Sub
[/vba]

Автор - Gustav
Дата добавления - 01.01.2017 в 21:34
AlexM Дата: Воскресенье, 01.01.2017, 22:34 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4517
Репутация: 1130 ±
Замечаний: 0% ±

Excel 2003



Номер мобильного модема (без голосовой связи)
9269171249 МегаФон, Московский регион.
 
Ответить
СообщениеКросс

Автор - AlexM
Дата добавления - 01.01.2017 в 22:34
bmv98rus Дата: Воскресенье, 01.01.2017, 22:55 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4147
Репутация: 772 ±
Замечаний: 0% ±

Excel 2013/2016
VirtualMan,

В данном случае проще и понятнее функцию сделать. использовать
Код
=ToDateText("1 марта в 19:24" , now() )


[vba]
Код
Function ToDateText(TextDate As String, TodayDate As Date)
   MonthsArray = Array("января", "февраля", "марта", "апреля", "мая", "июня", _
            "июля", "августа", "сентября", "октября", "ноября", "декабря")
    
    TextDate = Replace(TextDate, "сегодня в", Int(TodayDate))
    TextDate = Replace(TextDate, "вчера в", Int(TodayDate) - 1)
    
    For i = 0 To 11
        TextDate = Replace(TextDate, " " & MonthsArray(i), "." & i & ".")
    Next
    TextDate = Replace(TextDate, " â ", Year(TodayDate) & " ")
    ToDateText = Format(TextDate, "YYYY-MM-DD HH:MM:SS")
End Function
[/vba]

или

Код
=TEXT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;"сегодня в "; TEXT(TODAY();"ДД ММММ ГГГГ "));"вчера в"; TEXT(TODAY()-1;"ДД ММММ ГГГГ "));"а ";" ");"ая "; "ай ");"я ";"ь ");" в "; " " & YEAR(TODAY()) &" ");"ГГГГ-ММ-ДД чч:мм:сс")


хотя предложенное в Кросс симпатично выглядит.
Код
=ЕСЛИ(ЕОШ(-ЛЕВБ(A1));СЕГОДНЯ()-ПРОСМОТР(2;ПОИСК({"вчера";"сегодня"};A1);{1;0});ЛЕВБ(ПОДСТАВИТЬ(A1;"я ";"й ");6)&E$1)+ПРАВБ(A1;5)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rus - Воскресенье, 01.01.2017, 23:20
 
Ответить
СообщениеVirtualMan,

В данном случае проще и понятнее функцию сделать. использовать
Код
=ToDateText("1 марта в 19:24" , now() )


[vba]
Код
Function ToDateText(TextDate As String, TodayDate As Date)
   MonthsArray = Array("января", "февраля", "марта", "апреля", "мая", "июня", _
            "июля", "августа", "сентября", "октября", "ноября", "декабря")
    
    TextDate = Replace(TextDate, "сегодня в", Int(TodayDate))
    TextDate = Replace(TextDate, "вчера в", Int(TodayDate) - 1)
    
    For i = 0 To 11
        TextDate = Replace(TextDate, " " & MonthsArray(i), "." & i & ".")
    Next
    TextDate = Replace(TextDate, " â ", Year(TodayDate) & " ")
    ToDateText = Format(TextDate, "YYYY-MM-DD HH:MM:SS")
End Function
[/vba]

или

Код
=TEXT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1;"сегодня в "; TEXT(TODAY();"ДД ММММ ГГГГ "));"вчера в"; TEXT(TODAY()-1;"ДД ММММ ГГГГ "));"а ";" ");"ая "; "ай ");"я ";"ь ");" в "; " " & YEAR(TODAY()) &" ");"ГГГГ-ММ-ДД чч:мм:сс")


хотя предложенное в Кросс симпатично выглядит.
Код
=ЕСЛИ(ЕОШ(-ЛЕВБ(A1));СЕГОДНЯ()-ПРОСМОТР(2;ПОИСК({"вчера";"сегодня"};A1);{1;0});ЛЕВБ(ПОДСТАВИТЬ(A1;"я ";"й ");6)&E$1)+ПРАВБ(A1;5)

Автор - bmv98rus
Дата добавления - 01.01.2017 в 22:55
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2025 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!