Страницы: 1
RSS
Excel получить подстроку по маске и до первой буквы
 
Здравствуйте. необходимо получить подстроку по маске и выделить до первой буквы. например:
есть строка QWE123-12319.10.12.123Вася
нужно получить 19.10.12.123
До 19.10 может быть разное количество символов.
Искать нужно по маске 19.10.
Спасибо
Изменено: zaknafein - 28.11.2022 08:47:01
 
Цитата
qwe qwe написал:
Искать нужно по маске 19.10.
Найти 19.10. в строке не проблема даже стандартными функциями. Но почему получить при этом надо 19.10.12.123? На основании какой логики?

P.S. Одной строки примера явно недостаточно. Лучше будет, если приложите пример файла с данными(строк 10 различных комбинаций) и для каждой покажете желаемый результат с описанием, почему именно так.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
это ip адреса, но они замешаны вот в такие строки...т.е. 19.10 это неизменная часть, а после вариации начинаются.  
 
задача явно для RegExp:
Pattern = "19\.10\.\d+\.\d{1,3}"
Изменено: Ігор Гончаренко - 28.11.2022 09:28:46
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
qwe qwe, здравствуйте
Анализ текста регулярными выражениями (RegExp) в Excel + шаблон "19\.10\.\d\d\.\d\d\d"

Разница с вариантом от Ігор Гончаренко в том, что мой шаблон подберёт количество цифр точно, а у него допускается произвольное их количество в каждой группе после 19.10. Что вам лучше - решайте сами.
Изменено: Jack Famous - 28.11.2022 09:31:26
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
=IFERROR(REPLACE(IFERROR(LEFT(A1;MIN(IFERROR(IF(LOOKUP(CODE(UPPER(MID(A1;ROW($1:$99);1)));{0\65\91\97\123\168\169\192\223};{0\1\0\1\0\1\0\1\0})*ROW($1:$99)>FIND("19.10.";A1);ROW($1:$99));1=0))-1);A1);1;FIND("19.10.";A1)-1;);"")
По вопросам из тем форума, личку не читаю.
 
Цитата
zaknafein написал:
это ip адреса
значит цифр в каждой группе может быть от 1 до трех :) Следовательно:
Код
Pattern = "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"

или(если надо именно на 19.10.):
Код
Pattern = "19\.10\.\d{1,3}\.\d{1,3}"
Изменено: Дмитрий(The_Prist) Щербаков - 28.11.2022 09:34:11
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
всем спасибо за ответы. но что то не получается ничего. я никогда не использовал функцию эту. все сделал по инструкции, но ощущение, что она не работает. в ячейке ИМЯ пишет и все. сам паттерн писал в отдельной ячейке.
 
покажите что вы написали
подскажем что не так
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
в модуль добавил:
Код
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String
    Set regEx = CreateObject("VBScript.RegExp")
    regex.Pattern = Pattern
    regex.Global = True
    
        Set matches = regEx.Execute(Text)
        RegExpExtract = matches.Item(Item - 1)
End Function

в файле: в ячейке А3 текст, ячейка H3 =RegExpExtract(A3;$I$3),  ячейка I3: 19\.10\.\d+\.\d{1,3}
 
Цитата
написал:
в модуль добавил
в какой именно? Должно быть в стандартном: (из редактора VBE) -Insert -Module
Макросы в Excel должны быть разрешены.
Изменено: Дмитрий(The_Prist) Щербаков - 28.11.2022 12:36:42
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
все так и делал...
 
Цитата
zaknafein написал:
все так и делал
если бы так и делали - не получили бы ошибку ИМЯ. Эта ошибка бывает в двух случаях:
1. Макросы не разрешены.
2. UDF в книге отсутствует или создана неправильно.
Поясню про макросы(мало ли не в курсе): после того, как изменили уровень безопасности макросов - Excel надо полностью перезапустить. Т.е. закрыть все книги Excel, чтобы ни одного окна Excel не было. Потом открыть нужный файл и попробовать работу функции.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
понял. спасибо за ответы. буду дальше разбираться
 
нашел в чем проблема...  я модуль добавил в personal и при обращении к функции не указывал, что он в персонал...
 
Для Excel 365:
=ОБЪЕДИНИТЬ(".";;"19.10";ТЕКСТРАЗД(ТЕКСТПОСЛЕ(A1;"19.10.");СИМВОЛ(ВСТОЛБИК(ПОСЛЕД(198;;58);ПОСЛЕД(47)))))
Изменено: Бахтиёр - 29.11.2022 13:01:21
Страницы: 1
Наверх