前回質問を前提にします。
- MonthlySheet
新設します。1行目はDBシートと全く同じにします。
- 集計シート
A列とD列から右はMonthlySheetの値を参照させます。
具体的には、集計シートのA2セルには=MonthlySheet!A2
とかきます。
またA列には書式設定を行い、年月のみの表示になるように変更します。
B列は、D,E列の合計とします。具体的に集計シートのB2セルには=SUM(D2:E2)とかきます。 C列は、F列からP列の合計とします。具体的に集計シートのC2セルには
=SUM(F2:P2)とかきます。
適宜フィルハンドルをドラッグしてうめれば、1年分つくるのはそんなに手間ではないと思いますが arrayformula や importrange などもあるので、適宜ご利用ください。
javascript
1const q241762_242396 = () => {
2 const DBSheet = SpreadsheetApp.getActive().getSheetByName("DBシート");
3 const groupByMonth = DBSheet.getDataRange().getValues().slice(1).reduce((a,c)=> Object.assign(a, {[toYM(c[0])]: (a[toYM(c[0])] || []).concat([c])}),{});
4 const subtotal = Object.values(groupByMonth).map(e=>e.reduce(rowMerger));
5 const SubtotalSheet = SpreadsheetApp.getActive().getSheetByName("MonthlySheet");
6 SubtotalSheet.getRange(2,1,subtotal.length,subtotal[0].length).setValues(subtotal);
7}
8const toYM = (date) => Utilities.formatDate(date,"JST","yyyy/MM");
9const rowMerger = (a,c) => a.map((e,i) => i === 0 ? e : (e - 0) + ((c[i] - 0)));