Страницы: 1
RSS
Очистка текста по маске [UDF]
 
Всем привет!
Помогите, пожалуйста, формулой, позволяющей выделить из текстовой строки номер версии и дату релиза программы.
Сделал.
Просьба доработать функцию LDate - хотел вставить её в строку 63 (iDate = ), но она не может переварить входные данные.
Сделал.
Просьба по возможности оптимизировать время выполнения.
С уважением.
Изменено: Acid Burn - 20.01.2019 15:39:38
 
Друзья, в приложенном файле не работает Cdate.
Элементарно при X=20190116 ниже приведённая функция выдаёт ошибку #ЗНАЧ!:
Код
Function Test(X)
    If X Like "########" Then Test = CDate(Format$(X, "0\.00\.0000"))
End Function
В чём проблема?
Что-то не так с самим файлом?
Изменено: Acid Burn - 18.01.2019 14:31:51
 
а какую дату вы там хотите увидеть?) 19 месяц 0116 года?)
 
2019-01-16
 
А когда начнете уже документацию и справки изучать? Например, хотя бы по функции Format. Или хоть визуально посмотреть, что за дата будет при заданном Вами формате для числа. Никак вообще?

P.S. Название темы вообще не соответствует задаче.
Изменено: Дмитрий(The_Prist) Щербаков - 18.01.2019 15:50:49
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, с Format я собственно и начал - либо #ЗНАЧ! либо 20.19.0116...
Изменено: Acid Burn - 18.01.2019 17:51:56
 
Acid Burn, а про какую "очистку" разговор в названии темы?
 
Юрий М, нужные данные из текстовой строки я уже вытащил, т.е. очистка от всякого мусора уже сделана.
Осталось привести даты к формату ГГГГ-ММ-ДД по маске или как-то ещё. Вроде бы Ldate должна работать, но...
 
Так?
Код
Function test(X)     
If X Like "########" Then test = CDate(Format$(Left$(X, 4) & "." & Mid$(X, 5, 2) & "." & Right$(X, 2), "yyyy.mm.d")) 
End Function 

А лучше так:

Код
Function test(X) As Date     
If X Like "########" Then test = CDate(Right$(X, 2) & "." & Mid$(X, 5, 2) & "." & Left$(X, 4)) 
End Function
А еще лучше (системный разделитель может отличаться у разных пользователей):
Код
Function test(X) As Date
Dim aa$
aa = Mid(Date, 3, 1)
If X Like "########" Then test = CDate(Right$(X, 2) & aa & Mid$(X, 5, 2) & aa & Left$(X, 4))
End Function
Изменено: Anchoret - 19.01.2019 07:37:19
 
Цитата
Anchoret написал:
aa = Mid(Date, 3, 1)
а если формат локали установлен как YYYY/MM/DD? :)
Мое мнение - 100% решения под все форматы просто нет.
Но если число для преобразования всегда в виде YYYYMMDD, то лучше всего использовать DateSerial, чтобы не зависеть от разделителя вовсе:
Код
Function test(X) As Date
Dim aa$
aa = Mid(Date, 3, 1)
If X Like "########" Then test = DateSerial(Val(Left$(X, 4)), Val(Mid$(X, 5, 2)), Val(Right$(X, 2)))
End Function
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
а если формат локали установлен как YYYY/MM/DD?
Тогда грусть-печаль. Остается только найти способ при запуске Excel (рабочего файла) устанавливать разделители, формат даты и пр.. Наверняка такой способ есть.
 
Anchoret, The_Prist, благодарю Вас.

To All, нашёл свободные полчаса и вроде сделал даты. Чудесным образом всё работает и причём достаточно быстро.
Конечно же реальный файл намного больше, поэтому просьба ускорить и оптимизировать всё, что возможно.
Файл в посте №1. Спасибо!
 
Acid Burn, быстрее будет если обрабатывать единый массив с данными. Скажем макрос пройдется по диапазону, обработает каждую строку, занесет результаты обработки с массив и далее этот массив выгрузить в столбец.

До кучи набросал мелкую функцию по поиску максимально допустимого значения в строке, которое можно интерпретировать как год с примером ее использования:
Скрытый текст
Изменено: Anchoret - 21.01.2019 10:54:54
 
Anchoret, спасибо, но к сожалению, нужна именно UDF, в т.ч. для точечной обработки позиций.
Пожалуй, оставлю пока всё, как есть, а там видно будет. Ещё раз всем спасибо за участие!
 
Совсем забыл! Подскажите, пожалуйста, как убрать подстроки типа "Hotfix for Mac (January 11, 2019)" и т.п.?
RegexpReplace(text, "Hotfix.*[\r\n]*", "") работает только в Rubular, но не в VBA.

Upd: всё работает.
Изменено: Acid Burn - 22.01.2019 23:45:52
Страницы: 1
Наверх