it-swarm.com.de

Berechneter Bereich basierend auf einigen Kriterien

Angesichts dieses Layouts:

+--------+      +--------+
| A  | B |      | A  | B |
+----+---+      +----+---+
| 1  |   |      | 1  | 6 |
| 2  |   |      | 2  |   |
| 3  |   |  =>  | 3  |   |
|    |   |      |    |   |
| 4  |   |      | 4  | 9 |
| 5  |   |      | 5  |   |
|    |   |      |    |   |
+----+---+      +----+---+

Ich möchte die Summe von A1:A3 in B1 und die Summe von A5:A6 in B5 haben. Das ist trivial. Was ich wirklich will, ist eine Formel, die den Bereich A1:next_free_cell_below_in_a und A5:next_free_cell_below_in_a berechnet.

Bonus: Kann ich auch andere "Muster"/"Kriterien" verwenden?

Wie kann man das erreichen?

3
akira

es hat einige Zeit gedauert, aber hier ist es:

 =SUM(OFFSET(A1,0,0,INDEX(ROW(A1:A),MATCH(TRUE,ISBLANK(A1:A),0))-ROW(A1),1))

wie es funktioniert:

  1. wir wollen die Summe eines Bereichs. OFFSET gibt einen Bereich an, der auf einem Startpunkt (optionaler Versatz in x und y) und einigen Bemaßungen basiert.

  2. A1 ist die Referenzecke, 0 und 0 sind die Offsets (wir möchten in der Spalte A bleiben). der 1 am Ende bedeutet "nur die A-Spalte".

  3. der 'height'-Parameter der OFFSET -Funktion wird berechnet durch row of empy cell - ROW(A1) (das ist die Startzelle)

  4. INDEX(ROW(A1:A), MATCH(TRUE, ISBLANK(A1:A), 0)) berechnet die Nummer der ersten leeren Zelle unter A1.

wenn jemand erklären könnte, warum 4. so funktioniert, kommentieren Sie bitte meine Antwort.

0
akira

Für diese Lösung wird eine Dummy-Zeile (1: 1) und eine Dummy-Spalte (C: C) verwendet.

Formel:
B2 enthält =IF(ISBLANK(A1),C2,"") und wird dann nach B3:B7 kopiert
C2 enthält =A2+IF(ISBLANK(A3), 0, C3) und wird dann nach C3:C7 kopiert

   |    A    |    B    |    C
---+---------+---------+---------
 1 |         |         |         
 2 |       1 |       6 |       6  (ie. 3+2+1)
 3 |       2 |         |       5  (ie. 3+2)
 4 |       3 |         |       3  (ie. 3)
 5 |         |         |       9 
 6 |       4 |       9 |       9  (ie. 5+4)
 7 |       5 |         |       5  (ie. 5)

A:A: Daten
B:B: Wunschausgabe
C:C: Dummy-Spalte

Ich bin mir nicht so sicher, was Sie mit anderen "Mustern"/"Kriterien" meinen. Vielleicht können Sie mehr darüber beschreiben.

2
wilson

Mit dem folgenden Code können Sie genau das tun.

Code

function mySum(range) {
  var sum = 0, counter = 0, c = 0, output = [], index;
  for(var j = 0, jLen = range.length; j < jLen; j++) {
    if(range[j].indexOf('') !== 0) {
      sum += range[j][0];
      counter++;
    } else {      
      index = c * (j - counter);
      output[index]= sum;
      sum = 0;
      c = 1;
      counter = 0;
    }
  }  
  return output;
}

Erklärt

Zunächst werden eine Reihe von Variablen deklariert und gesetzt (= 0 oder []). In der for -Schleife wird geprüft, ob der Wert während der Iteration eine leere Zeichenfolge ist ('') oder nicht. Der Schlüssel ist das Zurücksetzen des Zählers und der Summe, nachdem eine leere Zelle getroffen wurde.

Bildschirmfoto

enter image description here

Hinweis

Konnte Ihre Lösung nicht implementieren. Das Skript ermöglicht es auch, andere Aufgaben als eine Summierung einfach zu implementieren.

Beispiel

Ich habe eine Beispieldatei für Sie erstellt: Berechneter Bereich basierend auf einigen Kriterien.
Fügen Sie das Skript unter Extras> Skript-Editor hinzu und klicken Sie auf die Schaltfläche Speichern (keine Authentifizierung erforderlich).

0