自动刷新自定义功能:COUNTIF语句:所有表格的范围+单元格参考作为标准

时间:2018-05-01 19:56:16

标签: google-sheets

我在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添加到其中一个活动工作表中,则不会自动更新。如何在添加新变量时编辑我的函数以进行更新?

1 个答案:

答案 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);
}




  • 将单元格' HELPER!A1的引用添加到自定义公式作为LAST参数。



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




  • 重新打开电子表格。您现在应该在电子表格菜单中有一个额外的菜单项,名为'更新'。

打开菜单项,然后点击“强制重新计算”。不,每次更新范围中的值时,只需单击菜单项即可。 这应该强制重新计算所有引用单元格的自定义公式' HELPER'!A1。

看看是否有效?

致以最诚挚的问候,

JPV