it-swarm.com.de

Google Spreadsheet-Summe, die immer oben in der Zelle endet

So erstellen Sie eine Google Spreadsheet-Summe (), die immer in der darüber liegenden Zelle endet, auch wenn neue Zellen hinzugefügt werden? Ich habe mehrere solcher Berechnungen für jede einzelne Spalte zu machen, damit Lösungen wie diese nicht helfen.

Beispiel: 

In Spalte B habe ich mehrere dynamische Bereiche, die summiert werden müssen. B1..B9 sollte auf B10 summiert werden und B11..B19 sollte auf B20 summiert werden. Ich habe zehn solcher Berechnungen zu machen. Hin und wieder füge ich Zeilen unter der letzten summierten Zeile hinzu, und ich möchte, dass sie zur Summe addiert werden. Ich füge vor Zeile 10 eine neue Zeile hinzu (nennen Sie es 9.1) und vor Zeile 20 ein neues Raw (nennen wir es 19.1). Ich möchte, dass B10 die Summe von B1 bis B9.1 enthält und B20 die Summe von B11 enthält: B19.1. 

In Excel habe ich die Offset-Funktion die es mag. Aber wie geht das mit der Google-Tabelle? Ich habe versucht, Formeln wie folgt zu verwenden:

=SUM(B1:INDIRECT(address(row()-1,column(),false)))   # Formula on B10
=SUM(B11:INDIRECT(address(row()-1,column(),false)))  # Formula on B20

In Google Spreadsheet wird jedoch nur ein #name-Fehler angezeigt.

Ich habe Stunden vergeblich versucht, eine Lösung zu finden, vielleicht kann jemand beruhigen?

Amnon

31
Druvision

Sie suchen wahrscheinlich nach Formel wie:

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

Google Spreadsheet INDIRECT gibt einen Verweis auf eine Zelle oder einen Bereich zurück, während - soweit ich mich erinnere - Excel INDIRECT immer einen Verweis auf eine Zelle zurückgibt. Da es für INDIRECT von Google in der Tat schwierig ist, es innerhalb von SUM als Zellreferenz zu verwenden, möchten Sie SUM mit dem gesamten Bereich füttern, der in z. a1-Notation: "B1: BX".

Sie erhalten die gewünschte Adresse auf dieselbe Weise wie in Excel (Hinweis "4" hier für relative Zeilen/Spalten, standardmäßig gibt Google INDIRECT absolut zurück):

ADDRESS(ROW()-1,COLUMN(),4)

und dann verwenden, um die Bereichszeichenfolge für die SUM-Funktion vorzubereiten, indem sie mit der Startzelle verkettet wird.

"B1:"&

und wickeln Sie es mit INDIRECT ab, was den zu summierenden Bereich zurückgibt.

VERWEIS AUF UNTERE ANTWORT von Druvision (Ich kann es noch nicht kommentieren, ich wollte keine Antworten multiplizieren)

Anstatt zeitaufwändige Formeln zu korrigieren, wird jede Zeitzeile eingefügt/gelöscht, damit alles so aussieht:

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

Sie können eine Spalte in einem separaten Blatt freihalten, um Variablen zu speichern (nennen wir es "def"), sagen wir Z, um Startpunkte zu definieren, z. in Z1 schreibe "B1" in Z2 schreibe "B11" usw. und benutze es dann als Variable in deiner Summe mit INDEX:

SUM(INDIRECT(INDEX(def!Z:Z,1,1)&":"&ADDRESS(ROW()-1,COLUMN(),4))) - Summe von B1 zu berechneter Zeile, da in Z1 "B1" steht (der 1,1 in INDEX(...,1,1))

SUM(INDIRECT(INDEX(def!Z:Z,2,1)&":"&ADDRESS(ROW()-1,COLUMN(),4))) - summiert von B11 zu berechneter Zeile, da in Z2 "B11" (der 2,1 in INDEX(...,2,1)) ist

bitte beachten Sie:

  1. Separates Blatt mit dem Namen 'def' - Sie möchten nicht, dass das Einfügen/Löschen von Zeilen diese Daten beeinflusst, und halten Sie sie daher auf der Seite. Nützlich zum Hinzufügen einiger Validierungslisten und anderer Dinge, die Sie in Ihren Formeln benötigen.

  2. "Z: Z" -Notation - ganze Spalte. Sie sagten, Sie hätten eine Menge solcher Formeln;)

Auf diese Weise behalten Sie die Flexibilität bei, die Startzelle für jede Ihrer Formeln zu definieren, die nicht durch Änderungen des Berechnungsblatts beeinflusst wird.

Wäre es nicht einfacher, benutzerdefinierte Funktionen/Skripte zu schreiben, die alle Zeilen über der Zelle zusammenfassen? Wenn Sie Lust auf Javascript haben, hat Google Spreadsheet, wie ich mich erinnere, jetzt einen netten Skript-Editor. Sie können eine Funktion erstellen, die z. sumRowsAboveMe () und verwenden Sie es dann einfach in Ihrem Arbeitsblatt wie =sumRowsAboveMe() in der Arbeitsblattzelle.

Hinweis: Möglicherweise müssen Sie Kommas durch Semikolons ersetzen

54
PsychoFish

NOTE Nach dem Testen dieser Antwort funktioniert sie nur, wenn sich die Summe aufgrund eines zirkularen Abhängigkeitsfehlers in einer different -Spalte befindet. Ansonsten ist die Lösung gültig.

Es ist ein bisschen Algebra, aber wir können die Spreadsheets unten rechts ziehen.

=SUM(X:X) - SUM(X2:X)

Dabei ist X die Spalte, mit der Sie arbeiten, und X2 ist Ihr -Endungspunkt. Ziehen Sie die Formel nach unten, und Sheets erhöht den Wert X2, wodurch der Endpunkt geändert wird.

* Sie haben erwähnt, dass Sie Dutzende solcher Berechnungen anstellen mussten. Um also genau auf Ihre Bedürfnisse einzugehen, würden wir Ihre letzte Summation abziehen, um den "mittleren" Bereich zu erhalten, den wir wollten.

z.B.

B1..B9 sollte auf B10 summiert werden und B11..B19 sollte auf B20 summiert werden

Aufgrund des oben erwähnten zirkulären Abhängigkeitsfehlers kann ich ihn nicht genau lösen und die Summe in dieselbe Zeile setzen. Dies könnte jedoch in anderen Fällen funktionieren, in denen die Summe in einer anderen Spalte gespeichert werden muss.

=SUM(B:B) - SUM(B9:B) //Formula on C10 (Sum of B1..B9)
=SUM(B:B) - SUM(B19:B) - B10 // Formula on C20 (Sum of B11..B19)
4
Moore's Qubits

Dies basiert auf @PsychoFish, hier ist die Lösung:

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

Ersetzen Sie einfach die "3:" für die Startsumme.

@PsychoFish ist korrekt, kann jedoch nicht gezogen und kopiert werden, da die Spalte wörtlich und hart codiert ist und @Druvision in die richtige Richtung war, aber falsch lag. Im Grunde endete das gleiche Problem, dass die Bereiche erneut eingegeben werden mussten Schieben Sie die Formeln immer wieder. 

2
smorhaim

Allgemeine Syntax:

=SUM(INDIRECT(cell_reference_as_string1 &":"& cell_reference_as_string2)

mit zum Beispiel:

cell_reference_as_string1 = ADDRESS(ROW(),COLUMN(),4)
cell_reference_as_string2 = ADDRESS(ROW()-1,COLUMN(),4)
1
abernier

Ich mag, wie @abernier die allgemeine Lösung beschreibt. Bisher wird nur die alphabetische A1-Notation (A ist erste Spalte, 1 erste Zeile) verwendet. Es verwirrt mich immer wieder, besonders wenn ich an die Anzahl der Spalten einer anderen Spalte denke. Die nummerbasierte R1C1-Notation gefällt mir viel besser. Um die R1C1-Notation für INDIREKT zu verwenden, müssen Sie FALSE wie folgt übergeben:

=SUM(INDIRECT("R1C"&COLUMN()&":R"&(ROW()-1)&"C"&COLUMN(), FALSE))

Ich hoffe, Sie finden das auch hilfreich.

1
knugie

Ihr macht das schwieriger als ihr müsst. Ich lasse einfach ein paar leere Zeilen oben durch "Summenzeile" (Sie können sie so formatieren, dass sie mit Farbe oder etwas gefüllt werden, damit sie nicht versehentlich verwendet werden). Fügen Sie dann einfach Ihre neuen Zeilen direkt über diesen speziellen Zeilen hinzu.

0
user7255446