Ich habe ein Arbeitsblatt Movements mit zwei Feldern:
mydate | amount
2009-01-01 | 10.00
2009-01-02 | 13.00
2009-02-01 | 11.00
2009-02-05 | 12.00
2009-02-08 | 52.00
Ich möchte in einem anderen Arbeitsblatt MonthSum, das die Summen der Daten in der Spalte Betrag enthält, gruppiert nach Jahr + Monat der Spalte Datum
mydate | amount
2009-01 | 23.00
2009-02 | 75.00
Ich möchte nicht die Zellen angeben, in denen die Kalkulationstabelle zusammengefasst werden muss. Ich möchte, dass eine generische Formel meine Daten pro Monat und Jahr gruppiert. Wenn ich in einer MySQL-Datenbank wäre, würde ich einfach Folgendes tun:
SELECT DATE_FORMAT('%Y-%m', mydate), SUM(amount)
FROM mytable GROUP BY DATE_FORMAT('%Y-%m', mydate)
Ich brauche die Lösung, um an Google-Spreadsheets zu arbeiten.
Ich denke, mögliche Lösungen wären SUMIF oder Pivot-Tabellen oder Google Spreadsheets QUERY function .
Sie können es mit einer Matrixformel tun, ich setze die Formel in A2
und in A1
, ich gebe die Monatsnummer ein:
=ARRAYFORMULA(SUMPRODUCT(1*(MONTH(Sheet1!$A$2:$A$6)=A1)*Sheet1!$B$2:$B$6))
Sehen Sie das doc in Aktion in Google Spreadsheet
[BEARBEITEN] Wenn Sie Jahr und Monat wünschen:
=ARRAYFORMULA(SUMPRODUCT(1*(YEAR(Sheet1!$A$2:$A$8)=A2)*(MONTH(Sheet1!$A$2:$A$8)=B2)*Sheet1!$B$2:$B$8))
Dafür gibt es Pivot-Tabellen .
Ich habe ein Beispiel mit Ihren Daten erstellt.
TEXT(A2, "YYYY-MM")
Eine kurze Übersicht über Pivot-Tabellen finden Sie unter dieser Google-Blog-Beitrag .
Lassen Sie mich zusätzlich zum Beitrag von JMax die folgende Formel mit der QUERY-Funktion präsentieren ...
=query(index('Sheet3'!A:B); "select year(Col1)+(month(Col1)+1)/100,sum(Col2) where Col1 is not null group by year(Col1)+(month(Col1)+1)/100 label year(Col1)+(month(Col1)+1)/100 'mydate',sum(Col2) 'amount' ")
Anmerkungen: Ich habe angenommen, dass die Originaldaten in Sheet3 Vorhanden sind, und mein Ergebnis zeigt die Kombination aus Jahr und Monat als JJJJ.mm anstelle von JJJJ-MM Ich habe eine Illustration erstellt:
Die Antwort von Matt Burns und Cœur ist ziemlich genau und ich möchte einen Kommentar hinzufügen (ich habe ihn nicht im Kommentarbereich hinzugefügt, da er ziemlich lang ist).
Sie können stattdessen diese Formel verwenden: DATE(YEAR(A2);MONTH(A2);1)
, um nach Jahr und Monat zu gruppieren.
Auf diese Weise können Sie Werte als Datumsangaben beibehalten und somit jede Art von Datumsformatierung oder Sortierung in Ihrer Pivot-Tabelle anwenden.
Erklärung, die Sie überspringen können:
Anstelle von TEXT(A2, "YYYY-MM")
wird der Wert in Text konvertiert und somit die Freiheit hinsichtlich weiterer Datumsmanipulationen aufgehoben.
DATE(YEAR(A2);MONTH(A2);1)
entferne den Tag und die Uhrzeit vom Datum, so dass zum Beispiel 2018/05/03 und 2018/05/06 beide 2018/05/01 werden, was noch ein Datum ist, das dann möglich ist gruppiert werden.
Durch Anwenden eines Formats "JJJJ-MM" direkt auf dem Pivot-Tisch erzielen Sie dasselbe Ergebnis.
Sie müssen einen Array-Ansatz verwenden. Wie man Arrays kombiniert, erfahren Sie hier https://stackoverflow.com/a/42488671/1393023
QUERY
Es ist einfach und transparent
=QUERY(
ARRAYFORMULA({TEXT(Movements!A:A,"YYYY-MM"),Movements!B:B}),
"select Col1,sum(Col2) group by Col1"
)
ARRAYFORMULA(SUMIF)
Kombinieren Sie einfach die Funktionen zu einer Kette
=SORT(UNIQUE(FILTER(
{
TEXT(Movements!A2:A,"YYYY-MM"),
SUMIF(EOMONTH(Movements!A2:A,1),EOMONTH(Movements!A2:A,1),Movements!B2:B)
},
LEN(Movements!B2:B)
)),1,1)
Ich habe mit einem ähnlichen Problem gearbeitet. Ich fand diese Formel gut zu funktionieren.
=SUMIF(ARRAYFORMULA(MONTH('Sheet1'!A:A)), A2, 'Sheet1'!B:B)
In Zelle A2
habe ich den gewünschten Monat zusammengezählt.