Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Доработка подсчета символов - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Доработка подсчета символов (Формулы/Formulas)
Доработка подсчета символов
vdekameron Дата: Среда, 14.11.2018, 12:06 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день уважаемые форумчане!
Есть простейшая формула, которая считает количество символов "Б".
Подскажите пожалуйста как доработать эту формулу, чтобы если между "Б" встречались буквы "В" то подсчитывались и "В".
Только если "В" встречается между "Б", это важно.
Прикрепляю пример для наглядности.
Заранее спасибо за помощь!
К сообщению приложен файл: 5843456.xlsx(9.5 Kb)


Сообщение отредактировал vdekameron - Среда, 14.11.2018, 12:13
 
Ответить
СообщениеДобрый день уважаемые форумчане!
Есть простейшая формула, которая считает количество символов "Б".
Подскажите пожалуйста как доработать эту формулу, чтобы если между "Б" встречались буквы "В" то подсчитывались и "В".
Только если "В" встречается между "Б", это важно.
Прикрепляю пример для наглядности.
Заранее спасибо за помощь!

Автор - vdekameron
Дата добавления - 14.11.2018 в 12:06
Pelena Дата: Среда, 14.11.2018, 12:09 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 13300
Репутация: 2927 ±
Замечаний: ±

Excel 2010, 2016 & Mac Excel
vdekameron, дайте теме более конкретное название, отражающее суть задачи


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщениеvdekameron, дайте теме более конкретное название, отражающее суть задачи

Автор - Pelena
Дата добавления - 14.11.2018 в 12:09
vdekameron Дата: Среда, 14.11.2018, 12:14 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
дайте теме более конкретное название, отражающее суть задачи

Сделал
 
Ответить
Сообщение
дайте теме более конкретное название, отражающее суть задачи

Сделал

Автор - vdekameron
Дата добавления - 14.11.2018 в 12:14
sboy Дата: Среда, 14.11.2018, 13:37 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 2236
Репутация: 631 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
В каждой ячейке всегда один символ? Опишите все, что считаете, т.к. в Вашей формуле не только Б и В.
Вариант пользовательской функцией, но только для Б и В (по условию в описании и примере)
[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]
К сообщению приложен файл: 5843456.xlsm(15.8 Kb)
 
Ответить
СообщениеДобрый день.
В каждой ячейке всегда один символ? Опишите все, что считаете, т.к. в Вашей формуле не только Б и В.
Вариант пользовательской функцией, но только для Б и В (по условию в описании и примере)
[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]

Автор - sboy
Дата добавления - 14.11.2018 в 13:37
vdekameron Дата: Среда, 14.11.2018, 15:01 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Да все работает как надо. Пусть будет только для "Б" и "В" я потом подкручу сам как надо. Только не могли бы вы чуть изменить алгоритм. Логика та же, но на выходе только количество букв "В" а не общее количество.
Спасибо!
 
Ответить
СообщениеДа все работает как надо. Пусть будет только для "Б" и "В" я потом подкручу сам как надо. Только не могли бы вы чуть изменить алгоритм. Логика та же, но на выходе только количество букв "В" а не общее количество.
Спасибо!

Автор - vdekameron
Дата добавления - 14.11.2018 в 15:01
sboy Дата: Среда, 14.11.2018, 17:07 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 2236
Репутация: 631 ±
Замечаний: 0% ±

Excel 2010
букв В между буквами Б, если так то
[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
[/vba]
К сообщению приложен файл: 3117226.xlsm(15.9 Kb)
 
Ответить
Сообщениебукв В между буквами Б, если так то
[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
[/vba]

Автор - sboy
Дата добавления - 14.11.2018 в 17:07
vdekameron Дата: Среда, 14.11.2018, 17:49 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо работает. Я примерно понимаю весь код кроме последнего цикла.
[vba]
Код
vdekameron = vdekameron + Len(.Execute(t)(i).Submatches(0))
[/vba]
Что это строка делает не могли бы объяснить? Это что рекурсия?
 
Ответить
СообщениеСпасибо работает. Я примерно понимаю весь код кроме последнего цикла.
[vba]
Код
vdekameron = vdekameron + Len(.Execute(t)(i).Submatches(0))
[/vba]
Что это строка делает не могли бы объяснить? Это что рекурсия?

Автор - vdekameron
Дата добавления - 14.11.2018 в 17:49
sboy Дата: Среда, 14.11.2018, 18:00 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 2236
Репутация: 631 ±
Замечаний: 0% ±

Excel 2010
Это суммирование в цикле на случай если будет несколько БВБ отрезков
АБАБВБВВВБ - тут у нас В между Б встречается 2 раза
в первом случае 1буква, vdekameron будет равнятся 1
во втором случае 3буквы, vdekameron = 1+3=4
и Паттерн надо немного переписать
[vba]
Код
.Pattern = "Б((В)+)(?=Б)"
[/vba]
 
Ответить
СообщениеЭто суммирование в цикле на случай если будет несколько БВБ отрезков
АБАБВБВВВБ - тут у нас В между Б встречается 2 раза
в первом случае 1буква, vdekameron будет равнятся 1
во втором случае 3буквы, vdekameron = 1+3=4
и Паттерн надо немного переписать
[vba]
Код
.Pattern = "Б((В)+)(?=Б)"
[/vba]

Автор - sboy
Дата добавления - 14.11.2018 в 18:00
vdekameron Дата: Среда, 14.11.2018, 18:05 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 177
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
И так работает! Огромное спасибо. Вы мне очень помогли)). Таки это рекурсия. С рекурсией у меня вечно проблемы, стараюсь ее стороной обходить)
А что делает Submatches?
 
Ответить
СообщениеИ так работает! Огромное спасибо. Вы мне очень помогли)). Таки это рекурсия. С рекурсией у меня вечно проблемы, стараюсь ее стороной обходить)
А что делает Submatches?

Автор - vdekameron
Дата добавления - 14.11.2018 в 18:05
sboy Дата: Четверг, 15.11.2018, 09:41 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 2236
Репутация: 631 ±
Замечаний: 0% ±

Excel 2010
А что делает Submatches?

это коллекция с найденными шаблонами
 
Ответить
Сообщение
А что делает Submatches?

это коллекция с найденными шаблонами

Автор - sboy
Дата добавления - 15.11.2018 в 09:41
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Доработка подсчета символов (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!