Преобразовать дату из текстовой строки в 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
Ответить
Сообщение Прошу помощи: В экселе сейчас текстовые поля вместо дат: 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]
Формулами задачу решить, конечно, можно, но они получаются довольно громоздкими. Поэтому предлагаю решать либо вручную (операциями замены), либо с использованием несложного макроса, "документирующего" ручные операции: [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
МОИ: Ник , 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)
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
Замечательный Временно просто медведь , процентов на 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