Страницы: 1
RSS
Преобразование в колонку и максимальное повторение слова
 
Привет !  Всем продуктивного дня , уважаемые Гуру ! :)

Имеется потребность в формуле или макросе...
Имеем 6 строк с данными ( Да , Нет , 0 )
Нужно найти максимальное число повторений ПОДРЯД слово НЕТ . Т.е. не общее количество ячеек содержащих слово НЕТ , а сколько раз максимально повторяется подряд.

Анализ должен идти непрерывно т.е. для этого ( как я понимаю) надо все строки перевести одну строчку или в один столбец.
У кого какие идеи ?  
 
UDF. Без необходимости преобразования диапазона в столбец
Код
Function ПОВТОРМАКС(rng As Range, ival)
Dim arrVal
Dim I&, J&, N&
arrVal = rng.Value
For I = 1 To UBound(arrVal, 1)
    For J = 1 To UBound(arrVal, 2)
        If arrVal(I, J) = ival Then
            N = N + 1
            If N > ПОВТОРМАКС Then ПОВТОРМАКС = N
        Else
            N = 0
        End If
    Next
Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
Alex.Mari, не нужно писать через 1-2 строки. Читабельность от этого лучше не становится.
 
Юрий М,Спасибо. Учтем
 
А по вопросу то что? Уже не интересно?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Агонь , спасибо !
 
Alex.Mari, нет в русском языке такого слова - Агонь.
 
Sanja, Что-то не работает... во вложении файл , посмотрите , пожалуйста. Правильный результат должен быть 6.
 
Почему-же 6? Максимальное количество 'НЕТ', расположенных ПОДРЯД (я это понимаю как непрерывно), по строкам, равно 3
Изменено: Sanja - 26.05.2017 09:36:49
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Может не так ТЗ сказал...
Исключая пустоту ))  
 
Цитата
Alex.Mari написал: Исключая пустоту
Вот где про ПУСТОТУ в стартовом посте?
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Не ругайтесь , пожалуйста .
 
Код
Function ПОВТОРМАКС(rng As Range, ival)
Dim arrVal(), arrTemp()
Dim I&, J&, N&
arrVal = rng.Value
For I = 1 To UBound(arrVal, 1)
    For J = 1 To UBound(arrVal, 2)
        If arrVal(I, J) <> Empty Then
            ReDim Preserve arrTemp(N)
            arrTemp(N) = arrVal(I, J)
            N = N + 1
        End If
    Next
Next
N = 0
For I = 0 To UBound(arrTemp)
    If arrTemp(I) = ival Then
        N = N + 1
        If N > ПОВТОРМАКС Then ПОВТОРМАКС = N
    Else
        N = 0
    End If
Next
End Function
Согласие есть продукт при полном непротивлении сторон
 
Sanja,Cпасибочки :)
 
Sanja, Уважаемый , всезнающий мой спаситель ))) Что=то не работает...

Отображает общее количество ...
Во вложении.
Должен отображать 16..а отображает  37
 
Цитата
Alex.Mari написал: Должен отображать 16
Да с чего 16 то? Вы логику можете объяснить? Почему в предыдущем случае пустоты МЕЖДУ повторяющимися значениями считаются как непрерывный диапазон (хотя в количество и не входят), а в данном случае не считаются?
Согласие есть продукт при полном непротивлении сторон
Страницы: 1
Наверх