google-sheets - 在列标题中搜索条件,如果条件满足相应列中非空单元格的计数
问题描述
我有一个包含轮班注册数据的谷歌电子表格,并想计算每个日期完成了多少注册(通过谷歌表格)。但是,每次输入数据时使用谷歌表单重新填充,日期可以出现在多列中
我的 Sheet1 看起来像这样:
Name |02.1 |03.1 |04.1 |02.1
-----------------------------
Paul |5-9 |6-10 | |
Frank| |5-9 | |6-10
Tom | | |6-10 |5-9
我想找到一个公式,放置在 Sheet2 中,它可以搜索包含某个列标题(02.1)的所有列,并计算同一列中存在多少非空白单元格。
因此,如果查找包含文本 02.1 的列,则结果应为 3。
这是我想在 Sheet2 中实现的结果:
|Count |
-----------------------------
02.1 |3 |
03.1 |2 |
04.1 |1 |
由于每次 somone 注册时文件都在扩展,我有大约 100 行,我想全年重复使用它,因此寻找最动态的解决方案,无需进行太多手动输入。
解决方案
最直接的方式(在我看来)是自定义函数。您可以使用“header”参数精确计算具有相同标题的列的非空值,如下所示:
function COUNT_BY_HEADER(header) {
// Here is a sheet with data to count (non-empty cells)
var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
var values = sheet.getDataRange().getValues();
var headers = values.shift(),
count = 0;
for (var i in headers) {
if (headers[i] == header) {
for (var j in values) {
if (values[j][i]) count++;
}
}
}
return count;
}
例如,您可以编写一个公式:=COUNT_BY_HEADER(A3)
为 Sheet2 的第三行。
顺便说一句,共享的 Sheet2 包含更复杂的数据(不完全等于 Sheet1 的标题)。还要注意工作表名称(“Sheet1”还是“Sheet1.”?)...
推荐阅读
- linux - 如何使频率出现在终端模式之后?
- function - Haskell,高阶函数和这里属于什么输入?
- python - 在 python 中创建脚本块时面临的问题
- android - Firebase 图表可视化无法显示 Android
- node.js - TypeError:过去必须是字符串或缓冲区
- azure-sql-database - 如果 Azure SQL 的故障转移组已经具有高可用性,那么它的用途是什么?
- python - 使用保存的 Word2Vec 模型时发出警告
- cocoa - 在 Mojave 上禁用 NSScrollView 内部的活力?
- apache-spark - 从文本中近乎实时地提取表情符号
- python - 使用正则表达式从字符串中提取多个单词