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