【问题标题】:COUNTIF Statements: Range Across All Sheets + Cell Reference as CriterionCOUNTIF 语句:所有工作表的范围 + 单元格引用作为标准
【发布时间】:2025-11-21 11:35:01
【问题描述】:

1) 所有工作表的范围:

我用谷歌搜索了所有内容,但什么也没有。基本上,我需要一个在所有工作表中查找相同范围的公式。

我当前的公式如下所示:

=COUNTIF(Aug_15!$G:$G, "Shaun")+countif(July_15!$G:$G, "Shaun)+countif(June_15!$G:$G, "Shaun")+countif(May_15!$G:$G, "Shaun")+COUNTIF(Apr_15!$G:$G, "Shaun")+COUNTIF(Mar_15!$G:$G, "Shaun")

我遇到的问题是,一个月过去了,创建了该月的新工作表。因此,这大大降低了自动化程度,因为您必须每个月都编辑公式。我基本上是在寻找可以在所有工作表中搜索 G:G 以符合该标准的东西。

所以在我想象的世界中,它看起来像这样:

=COUNTIF(ALLSHEETS!$G:$G, "Shaun")

2) 单元格引用作为标准

我正在尝试使标准从另一个单元格中查找某些内容。例如,我会将“Shaun”替换为单元格L3。但它不起作用!它从字面上搜索L3 这两个字符!

有没有办法让标准成为另一个单元格的值?

非常感谢,

肖恩。

【问题讨论】:

    标签: google-sheets


    【解决方案1】:

    正如 Akshin Jalilov 所注意到的,您需要一个脚本来实现这一点。前段时间我碰巧为那个场景编写了一个自定义函数。

    /**
     * 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'在C2时

    =COUNTALLSHEETS("B2:B3", C2)
    

    有一个可选参数允许您提供一个字符串,其中包含您希望从计数中排除的以逗号分隔的工作表名称。如果您想计算所有工作表,请不要使用此参数。

    看看这对你有用吗?

    【讨论】:

    • 喜欢这个!!!!只花了 20 分钟寻找输入大量 COUNTIF 的替代方法。谢谢。
    • 您还指定了一个选项,当 'Shaun' 在 C2 中时 =COUNTALLSHEETS("B2:B3", C2) 脚本如何知道使用上述函数搜索 Shaun?
    • @Frasier013 因为如果不使用引号,则将 C2 的值传递给自定义函数。
    【解决方案2】:

    1) 所有工作表的范围:

    您可以做到这一点的唯一方法是通过脚本,否则电子表格函数无法动态读取电子表格中的表格。

    2) 单元格引用作为标准

    如果 L3 的值为“Shaun”,您可以这样做:

    =COUNTIF(Aug_15!$G:$G, L3)
    

    确保您不要L3 放在引号中。

    【讨论】:

      最近更新 更多