W programie Excel, jak mogę zsumować wszystkie liczby powyżej bieżącej komórki?


31

Chcę mieć kolumnę w programie Excel, która składa się z nagłówka, wiązki liczb, a następnie mam sumę tych liczb na dole. Chciałbym, aby suma dostosowała się do wstawienia nowych liczb powyżej sumy. Coś takiego:

Numbers
 1
 2
 5
10

18        Total

Jeśli później wstawię 10 nowych liczb na środku listy, chcę, aby suma automatycznie je uwzględniła.

Wiem, że SUM()funkcja może sumować całą kolumnę, ale jeśli suma również znajduje się w tej kolumnie, wówczas narzeka na odwołanie cykliczne. Jak mogę sumować liczby powyżej sumy?

Odpowiedzi:


51

Funkcje ROW()i COLUMN()podadzą bieżący wiersz i kolumnę komórki. Użyj ich w ADDRESS()funkcji, aby utworzyć ciąg reprezentujący zakres od góry bieżącej kolumny do wiersza powyżej sumy. Następnie użyj INDIRECT()funkcji, aby przekształcić ten ciąg w rzeczywisty zakres, aby nadać tej SUM()funkcji. Formuła dla całej komórki byłaby wtedy:

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

Umieść to w dowolnej komórce w arkuszu kalkulacyjnym, a wyświetli się suma wszystkich liczb w kolumnie nad tą komórką.


1
@ user370646 Właściwie właśnie przetestowałem go w programie Excel 2010, używając kilku różnych typów formuł w różnych komórkach, które zostały dodane i działało poprawnie. (Błąd kończy się błędem odwołania cyklicznego, jeśli dodawane komórki zawierają formułę, która odwołuje się do komórki z sumą). Czy masz konkretne przykłady?
Mark Meuer

1
+1 razy na milion. Działa to w Arkuszach Google, w których zakresy funkcji sumowania - NIE NIE - są automatycznie aktualizowane. Dziękuję bardzo.
seekerOfKnowledge

1
Właśnie przetestowałem w Arkuszach Google i kombinacja funkcji działa idealnie.
niedz.

1
Ta odpowiedź uratowała mi życie!
kRazzy R

1
Wygląda na to, że działa również w LibreOffice Calc.
Dejan

6

W rzeczywistości możesz robić, co chcesz za pomocą zwykłego =SUM()

Zakładając, że arkusz Excel ma następujący wygląd:

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

Assumng A7jest =SUM(A1:A5), można dodać więcej wierszy, jak należy, jak Excel poszerzy =SUM„s wahają się odpowiednio.

Załóżmy teraz, że wybieram wiersze 2, 3 i 4 i wstawiam wiersze. Wynik będzie następujący:

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

A10równa =SUM(A1:A8). W związku z tym możesz teraz wstawiać nowe numery do woli.


1
Teraz, kiedy to przeliterowałeś, wiedziałem o tym zachowaniu. Ale z jakiegoś powodu pomyślałem, że przydałoby się po prostu mieć formułę, która zawsze sumowałaby się tuż nad bieżącą komórką. Ale oczywiście łatwiej jest stworzyć prosty zakres sum niż skomplikowaną formułę, którą wymyśliłem. Byłem zbyt mądry o połowę. Dzięki! (Będę musiał pocieszyć się, że przynajmniej nauczyłem się o ADRESIE BEZPOŚREDNIM i
ADRESIE

2
Zmieniłem zaakceptowaną odpowiedź na tę, którą opublikowałem, ponieważ ta wciąż zyskuje głosowanie ponad rok później, wykonuje pracę, o którą pytałem w pytaniu i najwyraźniej działa w arkuszach kalkulacyjnych Google, gdzie ta odpowiedź nie. Ale, @Doktoro, twoja odpowiedź zapewniła bardzo użyteczny wgląd i jestem za to wdzięczna.
Mark Meuer

1
Istnieje wada: wstaw wiersz na końcu (przed pustym wierszem). Przynajmniej w LibreOffice pozostawi to formułę SUM z oryginalnym zakresem, tzn. Z pominięciem nowego wiersza. Moje rozwiązanie: SUM(OFFSET(A$1; 0; 0; ROW(A7)-ROW(A$1); 1)). Ponieważ odnosi się do siebie, a nie do wiersza powyżej, zawsze odpowiednio dopasuje zakres.
Tilman Vogel,

@TilmanVogel powinien być odpowiedzią! Dziękuję bardzo
Genarito,

5

Ta odpowiedź jest specyficzna dla pakietu Libra Office, ale powinna również działać w programie Excel.

Zasadniczo, jeśli chcemy wyraźnie wspomnieć, że wiersz / kolumna ma zostać zamrożona, powinniśmy wspomnieć o $ z tym wierszem / kolumną.

* Istnieje również wbudowane algo, takie jak gdy kopiujesz formułę do innych komórek, Libra Office automatycznie określi, jak powinna zmienić wartości formuły.

Załóżmy więc, że musisz dodać wszystkie wiersze G1: GN => gdzie N jest bieżącym numerem wiersza. W tym celu chcesz naprawić wiersz pierwszej wartości i zachować inne wartości jako. Formuła będzie więc:

= SUMA (G $ 1: G1) -> dla 1. rzędu, a następnie możesz skopiować i wkleić formułę do innych komórek.

Libra Office automatycznie zachowa G1 jako pierwszą wartość i dynamicznie zmieni drugą wartość na G2, G3 i tak dalej dla każdej komórki.


Zgodnie z odpowiedzią Apostolos55> = Suma ($ A1: A1) <, to nie działałoby, ponieważ tylko kolumna A zostanie naprawiona, podczas gdy wiersz będzie się zmieniał, gdy formuła zostanie skopiowana do innych komórek w tej samej kolumnie. Tak więc $ należy dołączyć przed wierszem, aby uzyskać prawidłowe wartości w formule. Co więcej, nie wyjaśnił, jakie mogą być inne kombinacje, więc podałem alternatywę. $ Musi być zastosowany zarówno do wiersza, jak i kolumny, jeśli komórka ma być stała.
Prateek

3

ok, Indirect () jest niestabilny ... więc wraz ze wzrostem arkusza będzie on wolniejszy. Jeśli Ci to odpowiada, lepiej użyj:

=Sum($A1:A1)

przeciągając tę ​​formułę w dół, zawsze będziesz miał zakres od A1 do bieżącej (lub poprzedniej itp.) komórki. Bez lotnych, bardzo szybkich, o wiele prostszych!


Dziękuję za Twoją odpowiedź. Pomóż mi zrozumieć, czym różni się twoja odpowiedź od odpowiedzi @Doktoro Reichard?
Mark Meuer

Jest to suma, która może „podążać” obok komórek, powiedzmy w następnej kolumnie. Następnie za pomocą IF można wyświetlić / obliczyć tylko ostatnią sumę. Prawdopodobnie nie to, czego szukasz, ale warto wiedzieć.
Apostolos55

Dzięki za informację. Masz rację, że to nie rozwiązuje problemu z pierwotnego pytania (które konkretnie szuka formuły sumującej liczbę nad komórką), ale może być pomocne w innych sytuacjach.
Mark Meuer,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.