Страницы: 1
RSS
Цикл с суммированием
 
Краткое описание практического значения применения эксель:Есть Вращающиеся оборудование, которое периодически необходимо ремонтировать. Хочу проследить статистику, сколько оборотов совершает оборудование перед поломкой, для своевременного планирования.

Что делаю в Эксель:
1. Ежедневно записываю количество оборотов оборудования.
2. В случае если в этот день его ремонтируют ставлю 0, т.к. оборудование не работало.


Что хочу автоматизировать:
Необходимо чтобы в ячейке В2 отображалась сумма значений в колонке В ( В3:В100. т.к данные ежедневно дополняются), но чтобы в случае появления значения 0, моя сумма обнулялась, и следующие значения после 0 опять суммировались и отображались в колонке В2 без учета значений до 0. Другими словами у меня есть неизвестное количество циклов суммирования, при появления 0, первый цикл заканчивается и начинаются следующий.


Я средний пользователь Эксель, пробывал логически решить эту задачу без помочи  VBA, не получилось. Начал изучать статьи по  vba и ролики, но пока не понял как мне прописать правильный код, и уходит много времени.


Прошу подсказать мне с планом, что должно быть в моем коде, чтобы я мог точечно посмотреть примеры. Если у Вас есть какие то примеры кодов с похожей задачей - мне это сильно поможет. Спасибо !
 
Код
=СУММ(B3:B1048576)-ЕСЛИОШИБКА(СУММ(СМЕЩ(B3;0;0;ПОИСКПОЗ(0;B3:B1048576;0)-1;1));0)
 
мощная статистика у вас накоплена
Код
=СУММ(B:B)/СЧЁТЕСЛИ(B:B;0)
Изменено: Ігор Гончаренко - 28.12.2022 11:41:45
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код
Sub cnt()
    Dim r As Long, tmpSum As Double
    
    For r = Cells(Rows.Count, "B").End(xlUp).Row To 3 Step -1
        tmpSum = tmpSum + Cells(r, "B")
        If Cells(r, "B") = 0 Then Exit For
    Next r
    Cells(2, "B") = tmpSum
End Sub
 
Правильно ли я понимаю, что нулей может быть несколько?
Код
=СУММ(B99:ИНДЕКС(B:B;ПРОСМОТР(;-1/(B3:B99&1="01");СТРОКА(B3:B99))))

Еще там автораскраску добавил
Изменено: _Boroda_ - 28.12.2022 11:56:36
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
написал:
Код
    [URL=#]?[/URL]       1      =СУММ(B3:B1048576)-ЕСЛИОШИБКА(СУММ(СМЕЩ(B3;0;0;ПОИСКПОЗ(0;B3:B1048576;0)-1;1));0)   
 
Спасибо большое за ответ! к сожалению в данном случае в ячейке В2 всегда отображается сумма значений до первого 0. А мне необходимо чтобы появлялась сумма с последнего цикла.

Возможно если объясню практическую сторону будет легче понять что мне нужно:
Допустим я узнал что по достижению 120 оборотов мое оборудование часто ломается.
Для меня важно чтобы в ячейке в2 появлялось количество оборотов оборудования совершенных после последнего ремонта ( т.е. с последнего значения 0). Смотря на эту ячейку я буду видеть, допустим сейчас это оборудование совершило 30 оборотов, значит я могу отправить его на работу которая будет длиться 4 дня. Или наоборот я вижу что у него уже 100 оборотов, значит мне нет смысла отправлять его на 4 дневную работу, т.к. мне придётся его везти через день обратно и ремонтировать, лучше я отправлю другое оборудование.


Благодарю за Ваше потраченное время.
 
В этом вариант будет работать с несколькими нулями.
Код
=СУММ(B3:B1048576)-ЕСЛИОШИБКА(СУММ(СМЕЩ(B3;0;0;МАКС((B3:B1048576=0)*(B3:B1048576<>"")*СТРОКА(B3:B1048576))-1;1));0)
Вводить как формулу массива Ctrl+Shift+Enter.

Раз уже Вы стали описывать сопутствующую информацию, расскажите, что за оборудование, которое вращается с частотой 10 об./сутки.
Подходит для спутника, но как Вы его останавливаете на время ремонта? )))
Изменено: МатросНаЗебре - 28.12.2022 11:58:18
 
Дык я ж так и сделал ))) Посмотрите выше
Думаю, тему лучше назвать "Суммирование после последнего нуля" или как-то так примерно

Кстати, лучше немного дописать
Код
=СУММ(B99:ИНДЕКС(B:B;ЕСЛИОШИБКА(ПРОСМОТР(;-1/(B3:B99&1="01");СТРОКА(B3:B99));3)))
Изменено: _Boroda_ - 28.12.2022 11:59:39
Скажи мне, кудесник, любимец ба’гов...
 
Цитата
написал:
В этом вариант будет работать с несколькими нулями.
Код
    [URL=#]?[/URL]       1      =СУММ(B3:B1048576)-ЕСЛИОШИБКА(СУММ(СМЕЩ(B3;0;0;МАКС((B3:B1048576=0)*(B3:B1048576<>  ""  )*СТРОКА(B3:B1048576))-1;1));0)   
  Вводить как формулу массива Ctrl+Shift+Enter.

Раз уже Вы стали описывать сопутствующую информацию, расскажите, что за оборудование, которое вращается с частотой 10 об./сутки.
Подходит для спутника, но как Вы его останавливаете на время ремонта? )))
Спасибо большое! Очень помогли! Да, там количество средних оборотов 60/мин, а здесь я просто для упрощения придумал числа:)
 
Цитата
написал:
Дык я ж так и сделал ))) Посмотрите выше
Думаю, тему лучше назвать "Суммирование после последнего нуля" или как-то так примерно

Кстати, лучше немного дописать
Код
    [URL=#]?[/URL]       1      =СУММ(B99:ИНДЕКС(B:B;ЕСЛИОШИБКА(ПРОСМОТР(;-1/(B3:B99&1=  "01"  );СТРОКА(B3:B99));3)))   
 
Спасибо Вам! Да, Вы правы, не знал, что это можно сделать без VBA. Хорошего Вам дня!
 
Еще по мотивам Ленинской формулы из кросса
Код
=СУММ(ИНДЕКС(B:B;МАКС(3;(B3:B99&1="01")*СТРОКА(3:99))):B99)

Формула массива
Скажи мне, кудесник, любимец ба’гов...
Страницы: 1
Наверх