Werte spaltenweise summieren

Hallo,

gegeben:

  • zeilenweise viele Blöcke zu jeweils 3 Spalten [D1:F1], [G1:I1], [J1:L1], ff. mit ZAHLEN;
  • im ersten Dreier-Block [A1:C1] habe ich manuell die ZAHLEN-Werte in den Spalten-Zellen rangweise (1. bis 3. Rang) addiert, also
    • [A1] =D1+G1+J1+… sowie
    • [B1] =E1+H1+K1+… als auch
    • [C1] =F1+I1+L1+…

gesucht:
eigentlich ist der Algorithmus ganz simpel: pro Zeile den Wert jeder dritten Zelle ab vierte Zelle addieren:

  • Zelle 1 = Zelle 4 + Zelle 7 + Zelle 10 + Zelle 13 + Zelle 16…
  • Zelle: 2 = 5+8+11+14+17…
  • Zelle: 3 = 6+9+12+15+18…

Ich hoffe hierbei, dass ich keinen kleinen Fehler gemacht habe :woozy_face:.


Bislang arbeite ich mit MODULO(3), um nur jede dritte Spalte zu adressieren, das eine Hilfszeile bedingt.
000-LO-CALC_add every 3expn block_034142.ods (32.8 KB)
Gibt es eine sowohl einfachere (ohne Hilfszeile) als auch sichere (nicht manuell aufbauende) Lösung?

In A1 könnte die Formel so aussehen, die du dann nach rechts bis C1 ziehen kannst.

=SUMMENPRODUKT($D$1:$AD$1;REST(SPALTE($D$1:$AD$1)-1;3)=SPALTE()-1)

2 Likes

Auch wenn ich die einzelnen Funktionsglieder nicht verstehe, weil in MATRiX-Struktur komplex verschachtelt, so liefert sie mir genau das gewünschte Ergebnis.


Eine leichter zu ändernde Version habe ich daraus entworfen:

=LET(col;$D$1:$AD$1;SUMMENPRODUKT(col;REST(SPALTE(col)-1;3)=SPALTE()-1)

… wenn Spalten am Ende hinzukommen, muss …:$AD$1;… nur einmal geändert werden.

Wenn Du verstehen willst, was es macht, schau mal hier:
https://wiki.documentfoundation.org/Documentation/Calc_Functions/SUMPRODUCT/de

Die in der Funktion angegebenen Argumente werden also als Zellenlisten betrachtet, In Deinem Fall enthält die erste die eigentlichen Zellenwerte, von denen aber nur jeder dritte verwendet werden soll, deshalb brauchst Du als zweites Argument eine Liste, die nur für die von Dir gewünschten Zellen eine 1 liefert (WAHR=1) und für die anderen eine 0 (=FALSCH) und damit werden dann Deine Ursprungszellen multipliziert um alle nicht relevanten Zellen auf 0 zu bringen.

…mal abgesehen davon das die Bezeichnung »col« vorsätzlich irreführend für einen einzeiligen Bereich ist…

=LET(all;$D$1:$AD$1;SUM(INDEX(all;SEQUENCE(;QUOTIENT(COLUMNS(all);3);COLUMN(A1);3))))
=LET(all;$D$1:$AD$1;SUMME(INDEX(all;FOLGE(;QUOTIENT(SPALTEN(all);3);SPALTE(A1);3))))