Страницы: 1
RSS
Регулярные выражения (RegExp) в Excel
 
Здравствуйте.

Сделал все как написано здесь https://www.planetaexcel.ru/techniques/7/4844/.
Все получилось.


Искал в тексте ООО и ИП (столбец А)
Функция такая =ЕСЛИОШИБКА(RegExpExtract(A2;$C$2;1);"" В ячейке С2 - [ООО]{3}  
В другой строке =ЕСЛИОШИБКА(RegExpExtract(A2;$E$2;1);"" В ячейки E2 - [ИП]{2}
Сохранил файл. Открыл по новому и в столбцах где было пусто, тоесть ошибка появился текст Error 2015
Подскажите в чем проблема
 
Цитата
Mik1965 написал:
Подскажите в чем проблема
у меня открылся без проблем/без ошибок. Пересохранил с другим именем, открыл, тоже все ок
Кто ясно мыслит, тот ясно излагает.
 
Код
=ЕСЛИОШИБКА(RegExpExtract(A2;"\S+");"")
 
Mik1965, добрый день!
В функции RegexExtract паттерн лучше заменить на (если ищем в начале строки):
Код
^ *[OО]{3}\b ' искать в начале строки за которым следует 0 или больше пробельных символов. О русская и английская (вдруг опечатка) за которым следует граница слова
и
Код
^ *ИП\b ' искать в начале строки за которым следует 0 или больше пробельных символов. ИП в начале строки за котрым следует граница слова
указывать [ООО] не имеет смысла, так как это указание диапазона символов, то есть [ООО] == О{3}. По ИП тоже самое, а то получается, что ищем любую букву из диапазона [ИП] и она совпадет и с выражением ИИ и ПП тоже. Лучше использовать ИП просто как строковый литерал (буква И, за котрой сразу следует буква П). После ИП и ООО также, на мой взгляд лучше добавить символ границы слова, так как в противном случае паттерн ^ИП совпадет в начале строки и с выражением, например: ИПартюхов

По основному вопросу: может после открытия файла Вы не включили макросы? Так как RegexExtract  это пользовательская функция.
Изменено: artemkau88 - 28.03.2024 12:07:05
 
Цитата
написал:
По основному вопросу: может после открытия файла Вы не включили макросы? Так как RegexExtract  это пользовательская функция.
У меня все равно ошибка. Эксель запрашивает включить или не включать макросы, я пишу включать, но все равно ошибка
А по кодам можете мне разъеснить, куда и как нужно их вставлять
 
Mik1965, посмотрел файл. У Вас ошибка в тех ячейках, где не найдено совпадение. То есть все в порядке.
Набросал свой вариант (во вложении). Паттерн в ячейках C2 и E2 соответственно.
Если будете использовать вариант Николая, то, чтобы не было ошибки, можете заменить строку:
Код
RegExpExtract = CVErr(xlErrValue)
на
Код
RegExpExtract = ""
P.S: с этой функцией формулу ЕСЛИОШИБКА можно не использовать

или можно еще использовать другие паттерны (тогда в моей функции trim не нужен):
Код
(?<=^| )[ОO]{3}(?= ) ' для ООО
(?<=^| )ИП(?= ) ' для ИП
Код
'код:
Public Function RegExpExtract(Text As String, Pattern As String) As String
RegExpExtract = ""
    With CreateObject("VBScript.Regexp")
        .Ignorecase = False: .Global = False: .MultiLine = False: .Pattern = Pattern
        If .test(Text) Then RegExpExtract = .Execute(Text)(0)
    End With
End Function
Изменено: artemkau88 - 29.03.2024 11:33:13
 
Цитата
написал:
Если будете использовать вариант Николая, то, чтобы не было ошибки, можете заменить строку:КодRegExpExtract = CVErr(xlErrValue)наКодRegExpExtract = ""
У меня все равно выскакивывают ошибки
 
Какие ошибки выскакивают? В каких ячейках? Можете приложить скрин с ошибками и файл с макросом?
С моим вариантом тоже ошибки выскакивают?
Страницы: 1
Наверх