Function RegEx$(s$)
Dim re: Set re = CreateObject("VBScript.RegExp")
re.Pattern = ",([^,]+),[^,]*$": If re.test(s) Then RegEx = re.Execute(s)(0).submatches(0)
End Function
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
просмотр след вариантов принесет Вам не намного больше пользы чем просмотр предыдущего пишите сами, пока не появиться уверенность, что Вы поняли логику разработчика RegExp - тогда написание паттернов станет отнимать у Вас не намного больше времени, чем требуется чтобы набрать в определенной последовательности определенное количество символов удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
Привет, Михаил. На мой взгляд, ни в названии темы ни в результате нет ничего такого, что говорило бы о поиске с права на лево Это уже предположение ТС.
Андрей VG написал: шаблон Игоря ищет в этом направлении?
я и не говорил что паттерн Ігор Гончаренко, ищет справа налево. может, именно так и ищет. без комментария не пойму. что меня интересует уже сказал. вводную читал. нет там решений поиска последних при двух и более значений
Sub Tablica()
Dim i As Long
Dim iLastRow As Long
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
Range("K1:K" & iLastRow).ClearContents
For i = 1 To iLastRow
If Len(Cells(i, "A")) - Len(Replace(Cells(i, "A"), ",", "")) >= 2 Then
Cells(i, "K") = Split(Cells(i, "A"), ",")(UBound(Split(Cells(i, "A"), ",")) - 1)
End If
Next
End Sub
скорее ищу логику людей, умеющих пользоваться регулярными выражениями. зачем? по моему, видя как решают спецы задачи, быстрее и легче познается самому.
ну как зачем.. мало ли... я же просил решение.Ігор Гончаренко дал решение. и напутствие. может, после комментария даст и еще пару слов о логике поиска, так названого,справа налево
artyrH написал: но нет похожих задач как в этой теме
Изучение материала по ссылке нужно именно для построения рассуждений - это база для построения собственных. Если бы вы начали изучать, то смогли бы перевести набор символов шаблона Игоря ",([^,]+),[^,]*$" Найти запятую, за которой следует группа из не менее чем одного символа алфавита, не содержащего запятую, за этой группой следует запятая, после которой идут от 0 до нескольких символов алфавита, не содержащего запятую, до конца строки. В коде VBA используются как результат символы указанной группы. Как видите, в шаблоне нет ничего похожего на последняя запятая и предпоследняя. Нет таких терминов в регулярных выражениях. Но, чтобы уметь читать чужую логику нужно изучить базовую часть, а вот этого я и не увидел. Увидел лишь попытку построить вопрос Игорю под шаблон привычных вам алгоритмов. Только в случае регулярных выражений - это не поможет. Тут придётся учиться.
Андрей VG написал: [^,] допускаются все символы, кроме запятой
вроде, проясняется) только муторно как-то. пока привыкну.. Андрей VG, спасибо Вам. а я думаю че вы мне мозги парите... а Вы почву, оказывается, подготавливали
Function vvv$(t$)
vvv = StrReverse(Split(StrReverse(t), ",", 3)(1))
End Function
Код
Function bbb$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "[^,]+": .Global = True
bbb = .Execute(t)(.Execute(t).Count - 2)
End With
End Function
Ігор Гончаренко написал: вернет последнюю запятую и все, что есть за ней
вот я и смотрю что после работы паттерна еще и код функции обрезает справа от крайней справа запятой. каким паттерном получить этот же результат, используя код от Николая Павлова?
Function yyy$(t$)
With CreateObject("VBScript.RegExp"): .Pattern = "([^,]+),([^,]+),([^,]+)$": .Global = True
yyy = .Replace(t, "$2")
End With
End Function