В Excel, как я могу сложить все числа выше текущей ячейки?


31

Я хочу, чтобы в Excel был столбец, состоящий из заголовка, группы чисел, а затем сумма этих чисел внизу. Я хотел бы, чтобы сумма адаптировалась к вводу новых чисел выше суммы. Что-то вроде этого:

Numbers
 1
 2
 5
10

18        Total

Если позже я добавлю 10 новых чисел в середину списка, я хочу, чтобы сумма автоматически включала их.

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

Ответы:


51

Функции ROW()и COLUMN()даст текущую ячейку строки и столбца. Используйте их в ADDRESS()функции, чтобы создать строку, представляющую диапазон от вершины текущего столбца до строки над итогом. Затем используйте INDIRECT()функцию, чтобы превратить эту строку в реальный диапазон для SUM()функции. Формула для общей ячейки будет тогда:

=SUM(INDIRECT(ADDRESS(1,COLUMN())&":"&ADDRESS(ROW()-1,COLUMN())))

Поместите это в любую ячейку электронной таблицы, и она получит сумму всех чисел в столбце над этой ячейкой.


1
@ user370646 На самом деле, я только что протестировал его в Excel 2010, используя несколько различных типов формул в разных добавляемых ячейках, и он работал правильно. (Это приводит к ошибке циклической ссылки, если добавляемые ячейки содержат формулу, которая ссылается на ячейку с суммой.) Есть ли у вас конкретные примеры?
Марк Мейер

1
+1 раз миллион. Это работает в Google Sheets, где диапазоны функций сумм -DON'T- автоматически обновляются. Огромное спасибо.
seekerOfKnowledge

1
Я только что проверил в Google Sheets и сочетание функций работает отлично.
Вс

1
Этот ответ спас мне жизнь!
kRazzy R

1
Кажется, работает в LibreOffice Calc тоже.
Деян

6

На самом деле, вы можете делать то, что вы хотите с простым =SUM()

Предполагая, что ваш лист Excel имеет следующий дизайн:

\|  A  |  B  |
-+-----+-----+
1|  1  |     |
2|  2  |     |
3|  3  |     |
4|  4  |     |
5|  5  |     |
6|     |     |
7|  15 |Total|

Assumng A7есть =SUM(A1:A5), вы можете добавить несколько строк , как вы пожалуйста, как Excel расширит =SUM«s диапазон соответственно.

Теперь предположим, что я выбираю строки 2, 3 и 4 и вставляю строки. Результат будет следующим:

 \|  A  |  B  |
--+-----+-----+
 1|  1  |     |
 2|     |     |
 3|     |     |
 4|     |     |
 5|  2  |     |
 6|  3  |     |
 7|  4  |     |
 8|  5  |     |
 9|     |     |
10|  15 |Total|

A10равно =SUM(A1:A8). Таким образом, теперь вы можете вставлять новые номера по желанию.


1
Теперь, когда вы это изложите, я знал об этом поведении. Но по какой-то причине я подумал, что было бы удобно иметь формулу, которая всегда будет суммироваться чуть выше текущей ячейки. Но, очевидно, проще создать простой диапазон сумм, чем сложную формулу, которую я придумал. Я был слишком умен наполовину. Благодарность! (Я должен утешить себя тем, что я по крайней мере узнал о НЕПОСРЕДСТВЕННЫХ и АДРЕСАХ, которые я раньше не использовал.)
Марк Мейер

2
Я изменил принятый ответ на тот, который я опубликовал, так как он продолжает получать голоса более года спустя, выполняет работу, которую я задал в этом вопросе, и, по-видимому, работает в электронных таблицах Google, где этого ответа нет. Но @Doktoro, ваш ответ дал очень полезную информацию, и я благодарен за это.
Марк Мейер

1
Есть недостаток: вставьте строку в конце (перед пустой строкой). По крайней мере, в LibreOffice это оставит формулу SUM с ее исходным диапазоном, то есть пропустит новую строку. Мое решение: SUM(OFFSET(A$1; 0; 0; ROW(A7)-ROW(A$1); 1)). Поскольку он ссылается на себя, а не на строку выше, он всегда будет корректно корректировать диапазон.
Тилман Фогель

@TilmanVogel's должен быть ответом! Большое вам спасибо
Genarito

5

Этот ответ специфичен для Libra Office, но должен работать и для Excel.

По сути, если мы хотим явно упомянуть замороженную строку / столбец, мы должны упомянуть $ с этой строкой / столбцом.

* Существует также встроенный алгоритм, так что когда вы копируете формулу в другие ячейки, Libra Office автоматически определит, как ей следует изменить значения формулы.

Итак, давайте предположим, что вам нужно добавить все строки G1: GN =>, где N - номер текущей строки. Для этого вы хотите исправить строку первого значения и сохранить другие значения как. Таким образом, формула будет:

= SUM (G $ 1: G1) -> для 1-й строки, а затем вы можете скопировать и вставить формулу в другие ячейки.

Libra Office автоматически сохранит G1 в качестве первого значения и динамически изменит 2-е значение на G2, G3 и т. Д. Для каждой ячейки.


Согласно ответу Apostolos55> = Sum ($ A1: A1) <, он не будет работать, так как будет зафиксирован только столбец A, в то время как строка будет по-прежнему изменяться, когда формула копируется в другие ячейки в том же столбце. Таким образом, $ должен быть добавлен перед строкой, чтобы получить правильные значения в формуле. Далее, это не объясняет, что может быть другими комбинациями, поэтому я предоставил альтернативу. $ Должен быть применен как к строке, так и к столбцу, если ячейка должна оставаться постоянной.
Пратик

3

хорошо, Indirect () является изменчивым ... так что, как только ваш лист станет больше, он будет только медленнее. Если вам это подходит, вам лучше использовать:

=Sum($A1:A1)

когда вы перетаскиваете эту формулу вниз, у вас всегда будет диапазон от A1 до текущей (или предыдущей и т. д.) ячейки. Нет летучих, очень быстрых, гораздо более простых!


Спасибо за ответ. Пожалуйста, помогите мне понять, чем ваш ответ отличается от ответа @Doktoro Reichard?
Марк Мейер,

Это сумма, которая может «следовать» вместе с вашими клетками, скажем, в следующем столбце. Тогда с IF, вы можете только показать / рассчитать последнюю сумму. Вероятно, не то, что вы ищете, но полезно знать.
Апостолос55

Спасибо за информацию. Вы правы, что это не решает проблему из исходного вопроса (который конкретно ищет формулу для суммирования числа над ячейкой), но может быть полезным в других ситуациях.
Марк Мейер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.