使用SEARCH函数计算多个值的出现

时间:2019-08-14 08:00:19

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

所以我在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另一列中),我需要分别进行计数。

“日/夜”列位于班次列旁边的平行列中,具有“白天”或“夜晚”两个值之一

所以我的想法是创建一个数组公式,该数组公式可以根据列表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

2 个答案:

答案 0 :(得分:0)

日班:

BottomNavigationView

夜班:

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

enter image description here

答案 1 :(得分:0)

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

所以基本上可以了:


= Arrayformula(CountiF(Transpose(SPlit(Textjoin(“,”,TRUE,QUERY('Import_shift_data'!A:P,“选择P,其中M ='Night'”,1)),“,”,False )),INDIRECT(“ A2”):INDIRECT(CONCATENATE(“ A”,MAX(Arrayformula(IF(isblank($ A:$ A),“”,Row($ A:$ A))))))))))) )


感谢player0!