在列标题中搜索条件,如果条件满足相应列中非空单元格的计数

时间:2019-01-06 14:05:58

标签: google-sheets count

我有一个Google Spreasheet,其中包含班次注册数据,并希望计算每个日期完成了多少次注册(通过Google表单)。 但是,使用Google表单会在每次输入数据时重新填充,日期可以显示在多列中

我的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      |

随着每次有人注册时文件都在扩展,我大约有100行,并且我希望全年都可以重复使用,因此寻找了最动态的解决方案,无需太多手动输入。 / p>

1 个答案:

答案 0 :(得分:0)

(我认为)最直接的方法是自定义函数。您可以使用“标头”参数为具有完全相同的标头的列计算非空值,如下所示:

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;
}

例如,您可以为Sheet2的第三行写一个公式:=COUNT_BY_HEADER(A3)

顺便说一下,共享的Sheet2包含更复杂的数据(不完全等同于Sheet1的标头)。还应注意工作表名称(“ Sheet1”或“ Sheet1。”?)...