【问题标题】:Using SEARCH function to count occurrence of multiple values使用 SEARCH 函数计算多个值的出现次数
【发布时间】:2019-08-14 08:00:19
【问题描述】:

所以我在 Google 表格中有两个列表。一个是(相对较短的)姓名列表,假设是一群员工。第二个列表是(相当长的)轮班列表,其中记录了在场的员工。

例如:


List A - (rooster):         
___________________

Mike

Linda

Carrie

Dave

List B - (Import_shift_data):
____________________________

Mike, John

Dave, Linda, Mike

Carrie

Dave, John

Linda

Mike

Dave, Carrie, John, Mike

我的目标是统计每位员工的存在。

现在,这里是棘手的部分:

  1. 列表 B 每天更新,每个单元格包含多个名称。

  2. 随着一些员工加入团队和其他人离开,列表 A 也会更新。

  3. 每个班次可以是白班,也可以是夜班(列在列表 B 旁边的另一列中),我需要分别计算。

Day/night 列位于 shift 列旁边的平行列中,具有两个值之一,“Day”或“Night”

所以我的想法是创建一个数组公式,它可以根据列表 A 中值的数量进行扩展或缩小。问题是,我无法将整个 {list A} 用作第一个SEARCH 函数中的参数。

我已经尝试了以下方法:


=Arrayformula(IF(INDIRECT("A2"):INDIRECT(CONCATENATE("A",MAX(Arrayformula(IF(isblank($A:$A),"",Row($A:$A)))))) = 0,"",COUNTIFs('Import_shift_data'!$P:$P,INDIRECT("A2"):INDIRECT(CONCATENATE("A",MAX(Arrayformula(IF(isblank($A:$A),"",Row($A:$A)))))),'Import_shift_data'!$M:$M,"Night")))

。 但是这个公式只适用于一个员工的轮班。

我也写了这个:


=Countifs(Arrayformula(ISNUMBER(SEARCH(A2,'Import_shift_data'!$P:$P))),"true",'Import_shift_data'!$M:$M,"Night")

效果很好,但每次更新列表 A(公鸡)时,我都需要手动向上或向下拖动它。

所以我的最终目标是有两个数组,一个计算每个员工的夜班,一个计算白班。这些数组应该根据公鸡的大小自动缩小或扩大。 (列表 A)

注意:如果相关,我可能还会注意到 {List A} 中的姓名可能包含多个单词,以防有两名员工的名字相同。

电子表格的副本:

https://drive.google.com/open?id=1HRDAy9-T_rflFpzanZq0fmHpV0jTZg6Rc4vHyOu-1HI

【问题讨论】:

  • 您能分享一份您的电子表格副本,以便我们处理一些数据吗?

标签: google-sheets google-sheets-formula array-formulas google-sheets-query textjoin


【解决方案1】:

白班:

=ARRAYFORMULA(QUERY(TRIM(TRANSPOSE(SPLIT(TEXTJOIN(", ", 1, B2:B), ","))), 
 "select Col1,count(Col1) group by Col1 label count(Col1)''", 0))

夜班:

=ARRAYFORMULA(QUERY(TRIM(TRANSPOSE(SPLIT(TEXTJOIN(", ", 1, C2:C), ","))), 
 "select Col1,count(Col1) group by Col1 label count(Col1)''", 0))

【讨论】:

  • 首先感谢您的回复!关于答案,数据集排列有点不同(可以在上面的链接中看到),基本上有三列相关,一是公鸡,二是班次,三是布尔(“日”/ “夜晚”)。我可能还忘了提到一个名字也可能包含多个单词(如姓氏,以防两名员工的名字相同)。
【解决方案2】:

我想我已经找到了解决方案,我使用了 player0 的想法,即重新排列数据向量并将非单个移位拆分为单个单元格。

基本上就是这样:


=Arrayformula(CountiF(Transpose(SPlit(Textjoin(" , ",TRUE,QUERY('Import_shift_data'!A:P, "select P where M = 'Night'", 1))," , ",False )),INDIRECT("A2"):INDIRECT(CONCATENATE("A",MAX(Arrayformula(IF(isblank($A:$A),"",Row($A:$A))))))) )


感谢玩家0!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    相关资源
    最近更新 更多