Страницы: 1
RSS
Проблемы с вытаскиванием из формулы названий книг с помощью RegExp, Regexp
 
Добрый день.
Нужно вытащить из формулы:
=ИНДЕКС([1.xlsm]лист1!A1:D8;2;3)/МАКС([звезда.xlsm]свод1!K11:K22)
отдельно [1.xlsm] и [звезда.xlsm]

Код:
Код
Sub jjj()
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "\[.+\]"
objRegExp.Global = False
Set objMatches = objRegExp.Execute("=ИНДЕКС([1.xlsm]лист1!A1:D8;2;3)/МАКС([звезда.xlsm]свод1!K11:K22)")
For i = 0 To objMatches.Count - 1
    MsgBox objMatches.Item(i).Value
Next
End Sub
вытаскивает не то.
objRegExp.Global = False не помогает
 
XML - просто для варианта:
Код
=ФИЛЬТР.XML("<j><i>"&
ПОДСТАВИТЬ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(Ф.ТЕКСТ(A1);"[";СИМВОЛ(1));"]";СИМВОЛ(1));СИМВОЛ(1);"</i><i>")&
"</i></j>";
"//i[contains(.,'xls')]")
Изменено: Тимофеев - 25.01.2022 09:58:07
 
Тимофеев, спасибо, в принцие я могу и по другому вытащить.
Честно говоря, интересует решение на регулярках.

И почему objRegExp.Global = False не помогает?
 
Код
Sub jjj()
Dim objRegExp As Object, objMatches As Object, i&
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "\[.+?\]"
objRegExp.Global = True
Set objMatches = objRegExp.Execute("=ИНДЕКС([1.xlsm]лист1!A1:D8;2;3)/МАКС([звезда.xlsm]свод1!K11:K22)")
For i = 0 To objMatches.Count - 1
    MsgBox objMatches.Item(i).Value
Next
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Код
Pattern = "\[[^[]+\]"
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Бахтиёр: я могу и по другому вытащить … интересует решение на регулярках
к сожалению, не вышло — дал решение с помощью крутой строковой функции на основе варианта от Андрея VG (универсальнее, проще в использовании и, обычно, быстрее) и оставил нерабочий вариант с регулярными и подключенной библой (для тренировки остальным)
Скрин, Файл и Код
Посмотрите в моей теме Регулярные выражения. RegExp. Заменить символы между двумя цифрами или других моих темах по тэгу "регуляр" — Андрей VG там показывает мастер-класс  :idea:

Цитата
Бахтиёр: почему objRegExp.Global = False не помогает?
насколько я понимаю, глобал отвечает за продолжения поиска после первого совпадения и его отключение не позволит найти больше одного SubMatchesОбъект RegExp (справка)
Изменено: Jack Famous - 25.01.2022 10:27:28
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Еще вариант
Код
Pattern ="\w*.xlsm"
 
Все 3 предложенных шаблона RegExp работают  :idea:
Добавил скрин, обновил код и файл в #6
Изменено: Jack Famous - 25.01.2022 10:33:06 (Модеры сообщения удаляют/объединяют, а ссылки на пункты (которые съехали) не правят)))))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Спасибо всем за решения.
Изменено: Бахтиёр - 25.01.2022 12:37:22
Страницы: 1
Наверх