我花了一些時間,但找不到我正在尋找的答案。我正在撰寫一個成本計算器,并不是每個人都貢獻了每一項成本。我使用一個復選框來計算一個人是否是給定成本的貢獻者,最后有一個公式,該公式采用無限數量的引數(arguments在 JS 中使用),并將所有選中的框計算在內并添加到總和對于給定的人。您將在下面看到我的意思,包括螢屏截圖、代碼片段和我的 gSheet。我想弄清楚的是,如果選中了一個引數(復選框),則將來自不同行但同一列的不同單元格的值添加到我的總和中,作為我的復選框。
INDIRECT如果我直接在單元格中撰寫腳本,我可以使用語法,但是我嘗試使用 GAS 并呼叫該if函式,因此我可以添加 if(復選框)then 陳述句。任何幫助表示贊賞。
如果您能幫我弄清楚語法,那么我就不必將每個單元格的值添加為逗號分隔的引數,而是將范圍添加為引數陣列。
請看下面,看看您是否能幫我弄清楚我在尋找什么語法。
作業表的螢屏截圖
作業表鏈接在這里
代碼:
function addIt() {
for (let i = 0; i < arguments.length; i ) {
var sum = 0;
//this is where I want to add a 'perPerson' that is a value offset from the the cell position of a given argument
//var perPerson = [?????]
if (arguments[i] == true) {
sum = perPerson;
}
}
return sum;
}
uj5u.com熱心網友回復:
在您的情況下,以下示例腳本如何?
示例腳本 1:
在此示例中,請放入=addIt(B3:G3)單元格“H3”。通過這種方式,該值被放入單元格“H3”。
function addIt(values) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var v = sheet.getRange("B10:G10").getValues()[0];
return values[0].reduce((s, c, i) => s = c == true ? v[i] : 0, 0);
}
示例腳本 2:
在此示例中,請放入=addIt(B3:G8)單元格“H3”。通過這種方式,將值放入單元格“H3:H8”。
function addIt(values) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var v = sheet.getRange("B10:G10").getValues()[0];
return values.map(r => r.reduce((s, c, j) => s = c == true ? v[j] : 0, 0));
}
參考:
- 減少()
- 地圖()
uj5u.com熱心網友回復:
不使用任何單元格函式的總計
function grandTotals() {
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet0');
const sr = 3;
const ihA = sh.getRange(1, 1, 1, sh.getLastColumn()).getValues().flat();
const chA = sh.getRange(2, 1, 1, sh.getLastColumn()).getValues().flat();
const vs = sh.getRange(sr, 1, sh.getLastRow() - sr 1, sh.getLastColumn()).getDisplayValues();
let imidx = {};
ihA.forEach((h, i) => { imidx[h] = i; });
let csidx = {};
chA.forEach((h, i) => { csidx[h] = i; })
let gt = { pA: [], iA: [] };
//collecting cell data
vs.forEach((r, i) => {
r.forEach((c, j) => {
if (j > 0) {
if (c == "TRUE") {
if (!gt.hasOwnProperty(r[0])) {
gt[r[0]] = [];
gt[r[0]].push({ item: ihA[j], cost: chA[j] })
gt.pA.push(r[0]);
} else {
gt[r[0]].push({ item: ihA[j], cost: chA[j] })
}
if (!gt.hasOwnProperty(ihA[j])) {
gt[ihA[j]] = { cost: chA[j], count: 1 };
gt.iA.push(ihA[j])
} else {
gt[ihA[j]].count = 1;
}
}
}
});
});
//calculating grand totals
let g = gt.pA.map(p => {
return [p,parseInt(gt[p].reduce((a, obj) => {
a = gt[obj.item].cost / gt[obj.item].count;
return a;
}, 0))]
});
sh.getRange(sr,8,g.length,g[0].length).setValues(g);
const end = "is near";
console.log(g);
}
[ [ 'Person A', 408 ],
[ 'Person B', 808 ],
[ 'Person C', 150 ],
[ 'Person E', 25 ],
[ 'Person F', 708 ] ]
起始資料:
| 第 1 項 | 第 2 項 | 第 3 項 | 第 4 項 | 第 5 項 | 第 6 項 | |
|---|---|---|---|---|---|---|
| 100.00 美元 | 200.00 美元 | 300.00 美元 | 400.00 美元 | 500.00 美元 | 600.00 美元 | |
| 甲 | 真的 | 真的 | 錯誤的 | 真的 | 錯誤的 | 真的 |
| 乙 | 真的 | 真的 | 真的 | 真的 | 真的 | 真的 |
| C人 | 錯誤的 | 錯誤的 | 錯誤的 | 錯誤的 | 錯誤的 | 真的 |
| D人 | 錯誤的 | 錯誤的 | 錯誤的 | 錯誤的 | 錯誤的 | 錯誤的 |
| 人E | 真的 | 錯誤的 | 錯誤的 | 錯誤的 | 錯誤的 | 錯誤的 |
| F人 | 真的 | 錯誤的 | 真的 | 真的 | 真的 | 真的 |
總計:
| 人 | 成本 |
|---|---|
| 甲 | 408 |
| 乙 | 808 |
| C人 | 150 |
| 人E | 25 |
| F人 | 708 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404506.html
標籤:
