Excel-Formel zum Reduzieren benachbarter Zeilen mit einer Summe


0

Ich habe eine Tabelle mit folgenden Werten:

blah   1    12
       2    12
       3    12
foo    1     6
bar    1     2
foo    1     6
       2     5

Die Zahlen in der mittleren Spalte reichen von 1 bis 8; Zahlen in der rechten Spalte reichen von 1 bis 12. Die mittlere Spalte ist immer in Ordnung ohne Lücken, kann aber nach jedem Wert auf 1 zurückgesetzt werden. Die linke Spalte hat immer einen nicht leeren (aber nicht unbedingt eindeutigen) Wert in einer Zeile und einen leeren Wert in einer & gt; 1 Zeile. Die Werte für die Zeilen & gt; 1 sind meistens das selbe wie die 1 Reihe, aber nicht immer (und ich möchte nicht annehmen, dass sie sind).

Ich möchte eine neue Spalte mit einer einzelnen Formel hinzufügen, die für jede Zeile Folgendes enthält:

  • Wenn die erste Zahl eine 1 ist, addieren Sie alle zweiten Zahlen bis einschließlich der nächsten Zeile mit einer 1.
  • Wenn die erste Zahl etwas anderes ist, wird 0 ausgegeben.

dh Die erforderliche Ausgabe für die obigen Daten ist:

36
 0
 0
 6
 2
11
 0

Wenn es einfacher ist, könnte die Summe in der Zeile mit der höchsten Nummer jeder Untergruppe anstatt in der Zeile 1 erscheinen (obwohl ich sie definitiv in der Zeile 1 bevorzuge). Die Zeilenbeziehungen müssen jedoch beibehalten werden - es können nicht nur 4 Zeilen ausgegeben werden.

Alternativ könnte die Gruppierungsentscheidung auf der leeren / nicht leeren Spalte anstelle der Zählspalte basieren; wieder, wenn das einfacher ist.


Muss es eine Zellenformel sein oder könnte es ein VB-Skript sein?
Jonny Wright

Eine Formel wird bevorzugt, aber ein VB-Skript wäre auch in Ordnung. Ich hoffe auf etwas, das nicht zu groß ist, weil die Tabelle nicht als eine gespeichert wird. Es wird von Zeit zu Zeit aus CSV-Daten neu generiert, sodass ich Formeln erneut eingeben muss, um die Dinge zu berechnen.
Miral

Antworten:


1

Angenommen, Sie geben die Tabelle in A1: C7, in D1 und kopieren Sie sie nach unten:

=IF(B1=1,SUM(C1:INDEX(C1:C$1000,IFERROR(MATCH(TRUE,INDEX(B2:B$1000=1,,),0),MATCH(10^10,C:C)))),0)

Stellen Sie die 1000 bei Bedarf auf eine ausreichend höhere Zeilennummer ein.

Es sei angemerkt, dass diese Lösung davon ausgeht, dass die Werte in Spalte C numerisch sind und nicht z. Zahlen als Text gespeichert.


Ich bin mir immer noch nicht ganz sicher, wie das funktioniert, aber es funktioniert. Eine Änderung, die ich vorgenommen habe, war die Verwendung eines relativen Verweises ( C1:C12 anstatt C1:C$1000 ), da es einfacher ist, eine maximale Anzahl von Unterzeilen vor den 1-Wiederholungen zu definieren, als die maximale Anzahl von Zeilen insgesamt zu definieren. Auch dies gibt einen Fehler in der letzten Zeile, aber das ist leicht zu umgehen.
Miral
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.