В строках есть значения в скобках, нужно в первый столбец поместить значение из одной скобки, во второй столбец-из другой Получилось только для первых скобок...прикладываю файл
В строках есть значения в скобках, нужно в первый столбец поместить значение из одной скобки, во второй столбец-из другой Получилось только для первых скобок...прикладываю файлhatter
Спасибо, но не совсем подходит, т.к. массив большой и добавлять еще столбцы для определения позиции скобок(а их может быть до 6-ти пар) очень не удобно. Я пробую добавлять условия в первый вариант формулы, но не выходит((( слишком много вложений, может есть какой-то другой вариант решения??
Спасибо, но не совсем подходит, т.к. массив большой и добавлять еще столбцы для определения позиции скобок(а их может быть до 6-ти пар) очень не удобно. Я пробую добавлять условия в первый вариант формулы, но не выходит((( слишком много вложений, может есть какой-то другой вариант решения??hatter
А я в очередной раз размялся с регулярными выражениями. У меня пользовательская функция arrIzSkob (UDF), которую надо ввести как формулу массива в несколько ячеек строки, чтобы последовательно получить содержимое всех пар скобок (внутри которых нет других скобок) из исходной строки. Сейчас функция возвращает до 20 значений, т.е. если формулу массива ввести в большее кол-во ячеек, то начиная с 21-й пойдут #Н/Д. Если надо больше, то функция легко модифицируется в коде. Я не стал делать динамический массив, чтобы не отягощать алгоритм. Поэтому там сейчас тупо забита граница массива от 1 до 20.
[vba]
Код
Function arrIzSkob(ByVal text As String) As Variant
Static objRegExp As Object 'VBScript_RegExp_55.RegExp
Dim colMatches As Object 'VBScript_RegExp_55.MatchCollection Dim objMatch As Object 'VBScript_RegExp_55.Match Dim i As Integer
Dim arrMatches(1 To 20) As String 'ЗДЕСЬ НАДО МЕНЯТЬ, ЕСЛИ НАДО БОЛЬШЕ 20 !!!
If objRegExp Is Nothing Then Set objRegExp = CreateObject("VBScript.RegExp") 'New VBScript_RegExp_55.RegExp objRegExp.IgnoreCase = True objRegExp.Global = True objRegExp.Pattern = "\([^()]*\)" End If
If objRegExp.Test(text) = True Then Set colMatches = objRegExp.Execute(text) For Each objMatch In colMatches i = i + 1 arrMatches(i) = Replace(Replace(objMatch.Value, "(", ""), ")", "") Next End If
arrIzSkob = arrMatches
End Function
[/vba]
А я в очередной раз размялся с регулярными выражениями. У меня пользовательская функция arrIzSkob (UDF), которую надо ввести как формулу массива в несколько ячеек строки, чтобы последовательно получить содержимое всех пар скобок (внутри которых нет других скобок) из исходной строки. Сейчас функция возвращает до 20 значений, т.е. если формулу массива ввести в большее кол-во ячеек, то начиная с 21-й пойдут #Н/Д. Если надо больше, то функция легко модифицируется в коде. Я не стал делать динамический массив, чтобы не отягощать алгоритм. Поэтому там сейчас тупо забита граница массива от 1 до 20.
[vba]
Код
Function arrIzSkob(ByVal text As String) As Variant
Static objRegExp As Object 'VBScript_RegExp_55.RegExp
Dim colMatches As Object 'VBScript_RegExp_55.MatchCollection Dim objMatch As Object 'VBScript_RegExp_55.Match Dim i As Integer
Dim arrMatches(1 To 20) As String 'ЗДЕСЬ НАДО МЕНЯТЬ, ЕСЛИ НАДО БОЛЬШЕ 20 !!!
If objRegExp Is Nothing Then Set objRegExp = CreateObject("VBScript.RegExp") 'New VBScript_RegExp_55.RegExp objRegExp.IgnoreCase = True objRegExp.Global = True objRegExp.Pattern = "\([^()]*\)" End If
If objRegExp.Test(text) = True Then Set colMatches = objRegExp.Execute(text) For Each objMatch In colMatches i = i + 1 arrMatches(i) = Replace(Replace(objMatch.Value, "(", ""), ")", "") Next End If