Добрый день уважаемые форумчане! Есть простейшая формула, которая считает количество символов "Б". Подскажите пожалуйста как доработать эту формулу, чтобы если между "Б" встречались буквы "В" то подсчитывались и "В". Только если "В" встречается между "Б", это важно. Прикрепляю пример для наглядности. Заранее спасибо за помощь!
Добрый день уважаемые форумчане! Есть простейшая формула, которая считает количество символов "Б". Подскажите пожалуйста как доработать эту формулу, чтобы если между "Б" встречались буквы "В" то подсчитывались и "В". Только если "В" встречается между "Б", это важно. Прикрепляю пример для наглядности. Заранее спасибо за помощь!vdekameron
Добрый день. В каждой ячейке всегда один символ? Опишите все, что считаете, т.к. в Вашей формуле не только Б и В. Вариант пользовательской функцией, но только для Б и В (по условию в описании и примере) [vba]
Код
Function vdekameron(r As Range) As Integer For Each c In r.Cells t = t & c.Value Next With CreateObject("vbscript.regexp") .Global = True .Pattern = "(Б(В)+Б)|Б" If .test(t) Then For i = 0 To .Execute(t).Count - 1 vdekameron = vdekameron + Len(.Execute(t)(i)) Next i End If End With End Function
[/vba]
Добрый день. В каждой ячейке всегда один символ? Опишите все, что считаете, т.к. в Вашей формуле не только Б и В. Вариант пользовательской функцией, но только для Б и В (по условию в описании и примере) [vba]
Код
Function vdekameron(r As Range) As Integer For Each c In r.Cells t = t & c.Value Next With CreateObject("vbscript.regexp") .Global = True .Pattern = "(Б(В)+Б)|Б" If .test(t) Then For i = 0 To .Execute(t).Count - 1 vdekameron = vdekameron + Len(.Execute(t)(i)) Next i End If End With End Function
Да все работает как надо. Пусть будет только для "Б" и "В" я потом подкручу сам как надо. Только не могли бы вы чуть изменить алгоритм. Логика та же, но на выходе только количество букв "В" а не общее количество. Спасибо!
Да все работает как надо. Пусть будет только для "Б" и "В" я потом подкручу сам как надо. Только не могли бы вы чуть изменить алгоритм. Логика та же, но на выходе только количество букв "В" а не общее количество. Спасибо!vdekameron
Function vdekameron(r As Range) As Integer For Each c In r.Cells t = t & c.Value Next With CreateObject("vbscript.regexp") .Global = True .Pattern = "Б((В)+)Б" If .test(t) Then For i = 0 To .Execute(t).Count - 1 vdekameron = vdekameron + Len(.Execute(t)(i).Submatches(0)) Next i End If End With End Function
[/vba]
букв В между буквами Б, если так то [vba]
Код
Function vdekameron(r As Range) As Integer For Each c In r.Cells t = t & c.Value Next With CreateObject("vbscript.regexp") .Global = True .Pattern = "Б((В)+)Б" If .test(t) Then For i = 0 To .Execute(t).Count - 1 vdekameron = vdekameron + Len(.Execute(t)(i).Submatches(0)) Next i End If End With End Function
Это суммирование в цикле на случай если будет несколько БВБ отрезков АБАБВБВВВБ - тут у нас В между Б встречается 2 раза в первом случае 1буква, vdekameron будет равнятся 1 во втором случае 3буквы, vdekameron = 1+3=4 и Паттерн надо немного переписать [vba]
Код
.Pattern = "Б((В)+)(?=Б)"
[/vba]
Это суммирование в цикле на случай если будет несколько БВБ отрезков АБАБВБВВВБ - тут у нас В между Б встречается 2 раза в первом случае 1буква, vdekameron будет равнятся 1 во втором случае 3буквы, vdekameron = 1+3=4 и Паттерн надо немного переписать [vba]
И так работает! Огромное спасибо. Вы мне очень помогли)). Таки это рекурсия. С рекурсией у меня вечно проблемы, стараюсь ее стороной обходить) А что делает Submatches?
И так работает! Огромное спасибо. Вы мне очень помогли)). Таки это рекурсия. С рекурсией у меня вечно проблемы, стараюсь ее стороной обходить) А что делает Submatches?vdekameron