объединить числовые значения в итоги в диапазоне в Excel 2010 - PullRequest
0 голосов
/ 04 августа 2011

Учитывая столбец числовых значений, возможно ли суммировать значения, пока сумма не достигнет определенной пороговой величины, затем сбросить сумму итогов и продолжить?например

Val Sum
103 
52  155
47  
60  
103 210
100 
76  176
163 163
169 169
87  
103 190
84  
31  
59  174
87  
49  
67  203

Суммирует группы чисел, пока значение не превысит 150, а затем сбрасывает счетчик.

Ответы [ 3 ]

2 голосов
/ 04 августа 2011

я опубликую это больше для доказательства концепции , чем для реального ответа, или для случая, когда я мог бы это улучшить (у Иссуна тоже может быть идея).

Вот оно: Предположим, что ваш Val в column A, а Sum в column B и Titles в row 1.
В column C мы установим формулу, которая скажет, какая ячейка является «последней», в которой вы ее суммировали> в ячейке C3, поместив:

{=MAX(IF($B$2:B2=0;0;ROW($B$2:B2)))}

Это формула массива, которую вы должны подтвердить с помощью Ctrl Shift Введите .

В ячейку B3 вам нужно будет ввести первое значение (155 в вашем примере), извините, я не нашел подходящего обходного пути.
В ячейку B4 положите:

=IF(SUM($A$1:A4)-SUM(INDIRECT("$B$1:"&ADDRESS(C4;2)))>150;SUM($A$1:A4)-SUM(INDIRECT("$B$1:"&ADDRESS(C4;2)));0)

Затем перетащите формулы до конца значений.

[РЕДАКТИРОВАТЬ] На самом деле, вы можете поместить все это в одну формулу в ячейке B2:

{=IF(SUM($A$1:A2)-SUM(INDIRECT("$B$1:"&ADDRESS(MAX(IF($B$1:B1=0;0;ROW($B$1:B1)));2)))>150;SUM($A$1:A2)-SUM(INDIRECT("$B$1:"&ADDRESS(MAX(IF($B$1:B1=0;0;ROW($B$1:B1)));2)));0)}

и перетащите его до конца ваших значений. Кажется, тоже работает.

1 голос
/ 04 августа 2011

Самый простой способ сделать это (нет необходимости в формулах массива, не говоря уже о VBA):

В B2 введите =IF(B1<150,B1+A2,A2) и перетащите вниз. Эта сумма будет суммироваться, пока не достигнет 150 или более, а затем перезапустится с нуля. Конечно, промежуточные суммы (т.е. на пути до 150) также будут показаны. Если это вас беспокоит, на ум приходит пара вариантов:

  • Введите =IF(B2>=150,B2,"") в C2 и перетащите вниз, чтобы скрыть столбец B.
  • Применить условное форматирование к столбцу B так, чтобы числа ниже 150 отображались белым шрифтом.
1 голос
/ 04 августа 2011

Вот решение в VBA (извините, я знаю, что вы хотели форум). Очевидно, вы можете изменить диапазон так, как вам нужно. Обратите внимание, что я использовал LONG в качестве типа данных (и я использую long, чтобы избежать некоторых ошибок), но вам нужно использовать DOUBLE, если у вас есть числа с плавающей запятой.

Sub SumIt()

Dim cell As range
Dim currentCount As Long

For Each cell In range("A2:A100")
    currentCount = currentCount + CLng(cell.Value)
    If currentCount > 150 Then
        cell.Offset(0, 1).Value = currentCount
        currentCount = 0
    End If
Next

End Sub

Как это работает : я перебираю каждую ячейку в диапазоне и добавляю значение в переменную с именем currentCount. Затем я проверяю, больше ли это 150, вставляю ли я currentCount в столбец B (та же строка), сбрасываю счетчик и перехожу к следующей ячейке. Простой!

...