Страницы: 1
RSS
Из названия месяца в формат даты
 
Добрый день. Подскажите пожалуйста, как самым легким путем вернуть первый день месяца в формате даты с добавлением нужного года из его текстового названия. То есть "Январь" - 01.01.2020, "Февраль" 01.02.2020 и т.д. Заранее спасибо.  
 
Цитата
iLichek написал:
с добавлением нужного года из его текстового названия
И где в слове январь просматривается год? )
 
Не просматривается, имеется ввиду добавить текстом. Например, 2020
 
Код
= ЗНАЧЕН(месяц & " 2020")
где месяц - ссылка на ячейку с названием месяца
Изменено: Ігор Гончаренко - 13.10.2019 07:37:43
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
=--("январь"&2020)
Но оба варианта имеют ограничение - Формат времени в установках системы должен быть соответвующим
По вопросам из тем форума, личку не читаю.
 
Осмелюсь уточнить ограничение в ответе #5 Михаила. Кодовая страница Windows по умолчанию должна быть 1251.
Владимир
 
Подскажите пожалуйста, что не так в формуле?!

Из текста:
"не позднее 29 мая 2024 г."
Нужно получить:
"29.05.2024);"

Думал преобразовать в дату, через ДАТАЗНАЧ() (столбец - B), а потом через ТЕКСТ() отформатировать как надо  (столбец - C).

Не получается! ДАТАЗНАЧ() не срабатывает...
 
Цитата
zorkon71 написал:
ДАТАЗНАЧ() не срабатывает
Не нравится родительный падеж названия месяца. Нужен именительный падеж или первые три буквы названия месяца в именительном падеже.
Изменено: sokol92 - 16.04.2024 20:10:20
Владимир
 
UDF
Код
Function toDate(str As String) As Date
Dim temp As String
    temp = Replace(str, "не позднее", "")
    toDate = CDate(Replace(temp, " г.", ""))
End Function
 
В А12 много пробелов лишних, поэтому использовал СЖПРОБЕЛЫ()
Код
=--(ПСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(A5);"я ";"й ");13;6)&ЛЕВБ(ПРАВБ(A5;7);4))
Алексей М.
 
Здравствуйте . UDF
Код
Function StrToDate(txt$)
Dim Arr1: Const Rz$ = " "
Arr1 = VBA.Split(txt, Rz)
For i = 0 To UBound(Arr1)
If VBA.IsNumeric(Arr1(i)) Then Exit For
Next i
StrToDate = VBA.CDate(Arr1(i) & Rz & Arr1(i + 1) & Rz & Arr1(i + 2))
End Function
 
Еще пара UDF для разнообразия
Код
Function StrToDate1(Text As String)
    With CreateObject("VBScript.RegExp")
        .Pattern = "\d{2}[- .].{3,12}\d{4}"
    If .test(Text) Then StrToDate1 = CDate(.Execute(Text)(0)): Exit Function
    End With
End Function
Код
Function StrToDate2(txt)
Dim Arr() As Byte, Arr2() As Byte, n%, k%, i&
Arr = VBA.StrConv(txt, vbFromUnicode)
n = UBound(Arr)
For i = 0 To n
    If Arr(i) >= 48 And Arr(i) <= 57 Then
        If i < n Then n = i
        If i > k Then k = i
    End If
Next i
ReDim Arr2(n To k)
For i = n To k: Arr2(i) = Arr(i): Next
StrToDate2 = VBA.CDate(VBA.StrConv(Arr2, vbUnicode))
End Function
 
Спасибо всем огромное!
Макросы не подходят, не один я работаю с файлами. Коллегам будет трудно исправить, если вдруг чего... (Да и не знаю, как макрос вписать в файл... ;) )

Проверил с другими месяцами года, пришлось немного доработать идею АlехМ, и мне всё понравилось!
Код
=ТЕКСТ(--(ПСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ПЕЧСИМВ(A5));"я ";"й ");12;6)&ЛЕВБ(ПРАВБ(A5;7);4));"ДД.ММ.ГГГ")&");"&СИМВОЛ(10)
 
zorkon71, Если с функцией ТЕКСТ() то можно так
Код
=ТЕКСТ(ПСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(ПЕЧСИМВ(A5));"я ";"й ");12;6)&ЛЕВБ(ПРАВБ(A5;7);4);".\.\.ДД.ММ.ГГГ)\;"&СИМВОЛ(10))
Алексей М.
 
zorkon71
Цитата
Макросы не подходят, не один я работаю с файлами. Коллегам будет трудно исправить, если вдруг чего... (Да и не знаю, как макрос вписать в файл...
Вы просто не желаете с этим разобраться, хотя разобраться как функцию UDF добавить в файл 15-20 минут не более, даже если вы совсем не разбираетесь в этом. Ниже файл уже с функциями
Страницы: 1
Наверх