如何對具有兩個條件的多個專案重復 sumif 計算?在下面的示例中,我想根據水果和區域對“銷售量”求和:
Input
| 水果(Col A) | 雜項(Col B) | 區域 (Col C) | 銷售量(Col D) |
|---|---|---|---|
| 蘋果 | 廢話 | 1 | 5 |
| 梨 | 廢話 | 1 | 3 |
| 蘋果 | 廢話 | 1 | 4 |
| 蘋果 | 廢話 | 2 | 4 |
| 葡萄 | 廢話 | 2 | 4 |
| 梨 | 廢話 | 2 | 5 |
Desired Output (new sheet)
| 水果 | 區 | 銷售量(磅) |
|---|---|---|
| 蘋果 | 1 | 9 |
| 梨 | 1 | 3 |
| 蘋果 | 2 | 4 |
| 梨 | 2 | 5 |
| 葡萄 | 2 | 4 |
當有一個標準(水果)時, @Tanaike 提供了一個完美的答案:
function myFunction() {
const srcSheetName = "Sheet1"; // Please set your source sheet name.
const dstSheetName = "Sheet2"; // Please set your destination sheet name.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = ss.getSheetByName(srcSheetName);
const dstSheet = ss.getSheetByName(dstSheetName);
const values = srcSheet.getRange(2, 1, srcSheet.getLastRow() - 1, 4).getValues();
const res = [...values.reduce((m, [a,,, b]) => m.set(a, m.has(a) ? m.get(a) b : b), new Map())];
dstSheet.getRange(1, 1, res.length, res[0].length).setValues(res);
關于添加第二個標準(例如zone)的任何建議?謝謝你。
uj5u.com熱心網友回復:
從您顯示的示例輸入和輸出表來看,以下修改后的腳本怎么樣?
修改后的腳本:
function myFunction() {
const srcSheetName = "Sheet1"; // Please set your source sheet name.
const dstSheetName = "Sheet2"; // Please set your destination sheet name.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = ss.getSheetByName(srcSheetName);
const dstSheet = ss.getSheetByName(dstSheetName);
const values = srcSheet.getRange(2, 1, srcSheet.getLastRow() - 1, 4).getValues();
const res = [...values.reduce((m, [a, , c, d]) => {
const k = a c;
return m.set(k, [a, c, m.has(k) ? m.get(k)[2] d : d]);
}, new Map()).values()];
dstSheet.getRange(1, 1, res.length, res[0].length).setValues(res);
}
- 運行此腳本時,將從源作業表的“A”、“C”、“D”列中檢索源值。并且,值被轉換并且轉換后的值被放入目標表中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/527215.html
