我在Google表格中使用了此功能:
/**
* Counts the cells within the range on multiple sheets.
*
* @param {"A1:B23"} range The range to monitor (A1Notation).
* @param {"valueToCount"} countItem Either a string or a cell reference
* @param {"Sheet1, Sheet2"} excluded [Optional] - String that holds the names of the sheets that are excluded (comma-separated list);
* @return {number} The number of times the item appears in the range(s).
* @customfunction
*/
function COUNTALLSHEETS(range, countItem, excluded) {
try {
var count = 0,
ex = (excluded) ? Trim(excluded.split()) : false;
SpreadsheetApp.getActive()
.getSheets()
.forEach(function (s) {
if (ex && ex.indexOf(s.getName()) === -1 || !ex) {
s.getRange(range)
.getValues()
.reduce(function (a, b) {
return a.concat(b);
})
.forEach(function (v) {
if (v === countItem) count += 1;
});
};
});
return count;
} catch (e) {
throw e.message;
}
}
function Trim(v) {
return v.toString().replace(/^\s\s*/, "")
.replace(/\s\s*$/, "");
}
您可以在电子表格中使用自定义功能,如下所示:
=COUNTALLSHEETS("B2:B10", "Shaun")
此功能运行良好但如果将新的Shaun添加到其中一个活动工作表中,则不会自动更新。如何在添加新变量时编辑我的函数以进行更新?
答案 0 :(得分:1)
这是正确的。为了遍历所有工作表以获得相同的范围,该范围需要作为字符串传递。目前没有其他方法可以做到这一点。
但是,您可以尝试以下解决方法:
创建一个新工作表并将其命名为“HELPER'”。您只需要第一个单元格(A1)。因此,您可以删除所有其他行和列。此表也可以隐藏。
将这些脚本添加到脚本编辑器并保存。
function onOpen() {
SpreadsheetApp.getUi().createMenu('Update')
.addItem('Force Recalculation', 'forceRecalculation')
.addToUi()
}
function forceRecalculation() {
SpreadsheetApp.getActive().getSheetByName('HELPER').getRange(1, 1).setValue(Math.floor(Math.random() * (100 - 1 + 1)) + 1);
}

=COUNTALLSHEETS("B2:B10", "Shaun", 'Helper'!A1)

打开菜单项,然后点击“强制重新计算”。不,每次更新范围中的值时,只需单击菜单项即可。 这应该强制重新计算所有引用单元格的自定义公式' HELPER'!A1。
看看是否有效?
致以最诚挚的问候,
JPV