COUNTIF语句:所有表格的范围+单元格参考作为标准

时间:2015-08-05 23:05:20

标签: google-sheets

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

无论如何都要将标准作为另一个单元格的值吗?

非常感谢,

肖恩。

2 个答案:

答案 0 :(得分: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)

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

看看它是否适合你?

答案 1 :(得分:0)

1)所有表格的范围:

您可以通过脚本执行此操作的唯一方法,否则电子表格功能无法动态读取电子表格中的工作表。

2)细胞参考作为标准

如果 L3 的值为" Shaun"你可以这样做:

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

确保 L3 加入引号。