В 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.