使用特定搜索过滤11个值

时间:2019-12-15 02:04:56

标签: google-sheets google-sheets-formula

我想分开一个拥有团队的球员。为了找到这11名球员,他们从一个拥有(GK)的运动员开始,然后连续排在另外10个球员之后,总会有另一个以(GK)开头的运动员。正如我将要处理的多支球队一样,我希望自动进行此过滤,因为每支球队的球员人数不同,但是在某些情况下,所有球队之间的位置都介于10人之间(GK)。这些是持有人。

使用我测试的这个公式,它失败了,因为它从第一个(GK)过滤到最后一个(GK)

仅在一个(GK)之后有10个玩家,而在第十个玩家之后,又有(GK)另一个玩家,我该如何调整过滤条件?

=TRANSPOSE(SPLIT(REGEXEXTRACT(TEXTJOIN("♦️", 1,TRANSPOSE(SPLIT(REGEXEXTRACT(TEXTJOIN("♦️", 1,TRANSPOSE(SPLIT(REGEXEXTRACT(TEXTJOIN("♦️", 1,A2:A), "GK(.*)"), "♦️"))), "(.*)GK"), "♦️"))), "GK(.*)"), "♦️"))

enter image description here

我要使用的这种格式的问题是,它只有在我真正想要获得的名称(GK)在11之前的情况下才有效。如果不是,则生成错误。而且我也无法添加Lineup 11的第一个(GK)。

enter image description here

我想要的正确格式在下面的图片(Column LINEUP (11 Players))和电子表格中:
https://docs.google.com/spreadsheets/d/1jnirW5Wkfcj4eSzM9In0_ChxRFl_KtBjgfnp1Qdi2ZY/edit?usp=sharing

enter image description here

2 个答案:

答案 0 :(得分:1)

尝试这个:

=indirect(query(arrayformula( if(  if(REGEXMATCH(G2:G,".(GK)"),row(G2:G),0)-if(REGEXMATCH(G13:G,".(GK)"),row(G13:G),0)=-11, "G" & row(G2:G) & ":H" & row(G12:G),  )), "Select max(Col1) label max(Col1) ''"))

enter image description here

为了更灵活并可以复制:

=indirect(query(arrayformula( if(  if(REGEXMATCH(G3:G,".(GK)"),row(G3:G),0) -
                               if(REGEXMATCH(G14:G,".(GK)"),row(G14:G),0)=-11, 
                                     REGEXEXTRACT(address(row(G1),COLUMN(G1)), "[A-Z]+") & row(G3:G) & ":" 
                                     & REGEXEXTRACT(address(row(H1),COLUMN(H1)), "[A-Z]+") & row(G13:G),  )), 
      "Select max(Col1) label max(Col1) ''"))

enter image description here

答案 1 :(得分:1)

第一个例子

=offset(indirect("A"&arrayformula(vlookup(11,{filter(row(A2:A26),find("(GK)",A2:A26))-{0;array_constrain(filter(row(A2:A26),find("(GK)",A2:A26)),count(filter(row(A2:A26),find("(GK)",A2:A26)))-1,1)},filter(row(A2:A26),find("(GK)",A2:A26))},2,false))),-11,0,11,1)

第二个例子

=offset(indirect("G"&arrayformula(vlookup(11,{filter(row(G2:G26),find("(GK)",G2:G26))-{0;array_constrain(filter(row(G2:G26),find("(GK)",G2:G26)),count(filter(row(G2:G26),find("(GK)",G2:G26)))-1,1)},filter(row(G2:G26),find("(GK)",G2:G26))},2,false))),-11,0,11,1)