遍历一组Google工作表值

时间:2018-10-24 07:59:19

标签: google-sheets google-sheets-query google-sheets-formula

我有2组数据。一种是坦克名称

Tank Name  
  A1
  A2
  B1
  B2

下一个是ON / OFF数据

ON/OFF
  0
  1
  1
  1
  1
  1
  0
  0
  1
  1
  1
  1
  1
  1
  1
  0
  0
  1
  1
  1
  0
  1
  1 

现在我正在寻找的结果是,当ON / OFF为1时,将提及第一个储罐:当其为0时,将不提及任何储罐。一旦提及所有战车,则应从第一个战车即A1开始。但是,如果介于0和0之间,则应从A1重新开始。.

Result expected
 0  
 1  A1
 1  A2
 1  B1
 1  B2
 1  A1
 0  
 0  
 1  A1
 1  A2
 1  B1
 1  B2
 1  A1
 1  A2
 1  B1
 0  
 0  
 1  A1
 1  A2
 1  B1
 0  
 1  A1
 1  A2

您可以在此处查看Google工作表:方案2 https://docs.google.com/spreadsheets/d/1SP2SfA-bzzhHgfrvpyUIkeQfUykata0oHxyD-x69yxE/edit?usp=sharing

希望获得一些帮助以解决此问题。 谢谢

2 个答案:

答案 0 :(得分:0)

编辑

单一公式解决方案:

=FILTER(IF(B1:B=0,"",VLOOKUP(IFERROR(VLOOKUP(SUMIF(ROW(B1:B),"<="&ROW(B1:B),B1:B),{ROW(INDIRECT("a1:a"&COUNTIF(B:B,1))) , TRANSPOSE(SPLIT(TEXTJOIN("",1,TRANSPOSE(TEXT(ROW(INDIRECT("a1:a"&MAX(LEN(SPLIT(TEXTJOIN("",1,B1:B),"0")))))*(LEN(SPLIT(TEXTJOIN("",1,B1:B),"0"))>=ROW(INDIRECT("a1:a"&MAX(LEN(SPLIT(TEXTJOIN("",1,B1:B),"0")))))),"0"","";;"))),",")) },2,),0),{row(INDIRECT("a1:a"&COUNTIF(B1:B,1))) , VLOOKUP(MOD(ROW( INDIRECT("a1:a"&COUNTIF(B1:B,1)) )-1,COUNTA(A1:A))+1,{ROW(A1:A)-row(A1)+1,A1:A},2,)},2,)),B1:B<>"")

两个公式都可以做到。

C1中的

#1。对于具有循环的累加总和:

=Filter(IFERROR(VLOOKUP(SUMIF(ROW(B1:B),"<="&ROW(B1:B),B1:B),{ROW(INDIRECT("a1:a"&COUNTIF(B:B,1))) , TRANSPOSE(SPLIT(TEXTJOIN("",1,TRANSPOSE(TEXT(ROW(INDIRECT("a1:a"&MAX(LEN(SPLIT(TEXTJOIN("",1,B1:B),"0")))))*(LEN(SPLIT(TEXTJOIN("",1,B1:B),"0"))>=ROW(INDIRECT("a1:a"&MAX(LEN(SPLIT(TEXTJOIN("",1,B1:B),"0")))))), "0"","";;"))),",")) },2,),0),B1:B<>"")

D1中的#2。对于结果:

=FILTER(IF(B1:B=0,"",VLOOKUP(C1:C,{row(INDIRECT("a1:a"&COUNTIF(B1:B,1))) , VLOOKUP(MOD(ROW( INDIRECT("a1:a"&COUNTIF(B1:B,1)) )-1,COUNTA(A1:A))+1,{ROW(A1:A)-row(A1)+1,A1:A},2,)},2,)),B1:B<>"")

enter image description here

参考文献:

  1. Counters Lab
  2. Array Formulas Lab

答案 1 :(得分:0)

您可以在帮助器列中最轻松地完成

=if(B4=1,if(B3=0,0,mod(E3+1,4)),"")

然后从E4开始

=if(E4<>"",index(A$4:A$7,E4+1),"")

从F4开始。

这是使用单个非数组公式执行此操作的一种方法:

=IF(B4=1,INDEX(A$4:A$7,MOD(SUM(B4:INDEX(B:B,MAX(INDEX(IF(B$4:B4=0,ROW(B$4:B4)),0)),0))-1,4)+1),"")

在(说)G4中拉下。

所有这两个假设都假设B列中的序列以零开头,如果不是这种情况,则需要进行调整。

数组公式也是可能的:

=ArrayFormula(if(B4:B=1,vlookup(mod(sumif(row(B4:B),"<="&row(B4:B),B4:B)-sumif(row(B4:B),"<="&vlookup(row(B4:B),if(B4:B=0,row(B4:B)),1),B4:B)-1,4)+4,{row(4:7),A4:A7},2,false),""))

enter image description here

编辑

打开/关闭数据的第一行包含1时,使其工作最简单的方法可能是在B列中包含标题行,并使用n()将其视为零,因此帮助程序列公式为< / p>

=if(B4=1,if(n(B3)=0,0,mod(E3+1,4)),"")

非数组公式为

=IF(B4=1,INDEX(A$4:A$7,MOD(SUM(B4:INDEX(B:B,MAX(INDEX(IF(n(B$3:B4)=0,ROW(B$3:B4)),0)),0))-1,4)+1),"")

数组公式可以正常使用。这是出于偶然的原因,如果第二行Vlookup如果当前行之前的B列中没有零,则将失败并显示#N / A,但是当将其传递给Sum时,如果您得到的是所需的零结果,则< / p>

enter image description here