Страницы: 1
RSS
Суммирование диапазона с заданым ШАГОМ
 
Здравствуйте!  
Как-то мне понадобилось просуммировать диапазон с шагом через две ячейки. Долго искал, были варианты, но решил написать свою функцию SumStep.    
=SumStep(диапазон, шаг_по_колонкам, шаг_по_строкам).    
Можно выделять строку, столбец, или другой массив с несколькими строками и столбцами. Просуммируются только ячейки в столбцах с шагом "шаг_по_колонкам" и строках "шаг_по_строкам". Отсчет и Суммирования начинается с первой ячейки диапазона.  
Все параметры обязательны. Если в параметрах задать нули, то будет проведено сумирование всего диапазона.  
Смотрите, пользуйтесь, а если можете упростить, или улудшить функцию - СПАСИБО.  
Вот код функции, может кому то понадобиться... )  
 
Function SumStep(rg As Range, step_column As Long, step_row As Long) As Double  
Dim summa As Double  
summa = 0  
   With ActiveSheet  
       If step_row = 0 And step_column = 0 Then  
       summa = WorksheetFunction.Sum(rg)  
       End If  
     
       If step_row = 0 And step_column <> 0 Then  
       For x = 1 To rg.Rows.Count  
           For y = 1 To rg.Columns.Count Step step_column  
               summa = summa + rg(x, y).Value  
           Next y  
       Next x  
       End If  
     
       If step_row <> 0 And step_column = 0 Then  
       For x = 1 To rg.Rows.Count Step step_row  
           For y = 1 To rg.Columns.Count  
               summa = summa + rg(x, y).Value  
           Next y  
       Next x  
       End If  
     
       If step_row <> 0 And step_column <> 0 Then  
       For x = 1 To rg.Rows.Count Step step_row  
           For y = 1 To rg.Columns.Count Step step_column  
               summa = summa + rg(x, y).Value  
           Next y  
       Next x  
       End If  
     
SumStep = summa  
     
   End With  
End Function
 
А такой способ не пробовали?  
________________________  
khafizovtt@gmail.com
Учимся сами и помогаем другим...
 
Видел...) Но как-то много функций, но конечно, они встроенные.  
А так одной функцией... ) Но надо встраивать в файл... Или (чего ещё не знаю как) делать надстройку.
 
Формула массива (вводится Ctrl+Shift+Enter):  
=СУММ(ЕСЛИ(ОСТАТ(СТОЛБЕЦ(A:D);МАКС(C7;1))=0;ЕСЛИ(ОСТАТ(СТРОКА(1:4);МАКС(C6;1))=0;A1:D4)))  
 
Алгоритм почти тот же, но формула легче в вычислениях и учитывает пожелание автора:  
>>Если в параметрах задать нули, то будет проведено сумирование всего диапазона.
 
Соптимизировал формулу отталкиваясь от Вашей (спасибо!)  
=СУММПРОИЗВ((ОСТАТ(СТРОКА(1:4);МАКС(C6;1))=0)*((ОСТАТ(СТОЛБЕЦ(A:D);МАКС(C7;1))=0)*A1:D4))  
Теперь длины у них одинаковые, но моя без формулы массива :-)  
________________________  
khafizovtt@gmail.com
Учимся сами и помогаем другим...
 
Фигурные скобки не мешают моей бегать быстрее. Хотя, какая разница? Наши формулы считают неправильно :)  
А переделывать не хочется.  
При любом шаге отсчет нужно начинать с первой строки.
 
В приложении - упрощенная UDF  
 
 
Вопрос к спецам:  
правильна ли привязка к активному листу? Пробовал запускать функцию с другого листа - работает. Но как-то... Сомнения. Ведь в коде rg должен браться с активного листа...
 
правильна ли привязка к активному листу? - нет  
в аргументах самой функции есть привязка к нужному диапазону
 
Спасибо.  
With ActiveSheet/End With нужно удалить из кода.
Страницы: 1
Читают тему
Наверх