Здравствуйте. Скопировал в интернета VBA макрос для регулярных выражений. RegExpExtract
[vba]
Код
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String On Error GoTo ErrHandl Set regex = CreateObject("VBScript.RegExp") regex.Pattern = Pattern regex.Global = True If regex.Test(Text) Then Set matches = regex.Execute(Text) RegExpExtract = matches.Item(Item - 1) Exit Function End If ErrHandl: RegExpExtract = CVErr(xlErrValue) End Function
[/vba]
Сам макрос работает хорошо, но почему то не работает внутри функции Если. К примеру
Код
=ЕСЛИ(RegExpExtract(J10;"\d";1)<4;"true";"false")
Всегда возвращает false, я так понимаю макрос просто не выполняется внутри функции. Подскажите, как решить проблему?
Чего я хочу добиться: в столбцах есть данные вида "3б 10а", мне надо отфильтровать по младшим и старшим классам и далее выполнять вычисления
Здравствуйте. Скопировал в интернета VBA макрос для регулярных выражений. RegExpExtract
[vba]
Код
Public Function RegExpExtract(Text As String, Pattern As String, Optional Item As Integer = 1) As String On Error GoTo ErrHandl Set regex = CreateObject("VBScript.RegExp") regex.Pattern = Pattern regex.Global = True If regex.Test(Text) Then Set matches = regex.Execute(Text) RegExpExtract = matches.Item(Item - 1) Exit Function End If ErrHandl: RegExpExtract = CVErr(xlErrValue) End Function
[/vba]
Сам макрос работает хорошо, но почему то не работает внутри функции Если. К примеру
Код
=ЕСЛИ(RegExpExtract(J10;"\d";1)<4;"true";"false")
Всегда возвращает false, я так понимаю макрос просто не выполняется внутри функции. Подскажите, как решить проблему?
Чего я хочу добиться: в столбцах есть данные вида "3б 10а", мне надо отфильтровать по младшим и старшим классам и далее выполнять вычисленияmurad89280511638
Сообщение отредактировал Serge_007 - Понедельник, 24.01.2022, 12:07
У вас тип значения, возвращаемого функцией RegExpExtract - строка, а в формуле сравниваете с числом. А при сравнениях любая строка (даже пустая) всегда больше любого числа (даже самого большого) - поэтому всегда и FALSE. Для преодоления надо строковое значение, возвращаемое вашей функцией, на лету превратить в число. Простейший способ - два минуса перед:
У вас тип значения, возвращаемого функцией RegExpExtract - строка, а в формуле сравниваете с числом. А при сравнениях любая строка (даже пустая) всегда больше любого числа (даже самого большого) - поэтому всегда и FALSE. Для преодоления надо строковое значение, возвращаемое вашей функцией, на лету превратить в число. Простейший способ - два минуса перед: