使用TRUE语句识别范围的子集

我试图根据TRUE FALSE语句来确定范围的一个子集。 下面的图表就是一个例子。

FALSE FALSE 1.21147 TRUE FALSE 1.20984 FALSE FALSE 1.21083 FALSE FALSE 1.210315 FALSE TRUE 1.21151 FALSE FALSE 1.21335 FALSE FALSE 1.213515 FALSE FALSE 1.212435 TRUE FALSE 1.212125 FALSE FALSE 1.21226 

在这种情况下,我希望根据交替的TRUE语句来识别一个子集。 在左侧列中,第一个TRUE语句将触发子集的开始,第二列中的TRUE语句将触发子集的结束。 然后我想用一个简单的最大函数来标识第三列中的MAX。 我将使用IF语句来确定第一个TRUE语句是否正确,但是我无法弄清楚如何根据第二列中的TRUE语句来确定范围的子集。 我也想知道,如果这个声明有可能做到底,那么这个工作是否会从上到下发挥作用。 非常感激任何的帮助。

第1部分可以使用MATCHOFFSETMAX的组合来完成

对于这个例子,我假设你的数据位于A2单元格开始。

为了清楚起见,我在单元格E1:E4使用了一些中间结果。 如果您喜欢单一的公式,只需将中间公式合并到最终公式中即可

单元格E2 =列A中第一个TRUE位置

 =MATCH(TRUE,A2:A11,0) 

单元格E3 =列B中第一个TRUE位置

 =MATCH(TRUE,B2:B11,0) 

结果公式,在E2E3find的行之间的列C最大值(含)

 =MAX(OFFSET($C$1,E2,0,E3-E2+1,1)) 

第2部分是更棘手的:我不认为你可以search范围的价值。 但是,看看你的数据可能是好的,search第二个 TRUE ? 如果这是好的,那么:

单元格E4 =列A中第二个TRUE位置

 =MATCH(TRUE,OFFSET(A2:A11,E2,0),0) 

或者这个,作为一个数组公式(由巴里Insipred)input, 它将得到列中的最后一个TRUE

 =MATCH(2, 1/(A2:A11=TRUE),1) 

结果公式,列E4E3E4包含的行之间的最大值(含)

 =MAX(OFFSET($C$1,E3,0,E4+E2-E3+1,1)) 

你从底部遍历表的一部分困惑了我,也不知道你是否可以有多个子集,因为你倒数第二行似乎是一个新的子集没有closures的开放。 无论如何,希望这有助于。 我假设你不想使用macros,在这种情况下,这将是微不足道的。 你可以做的是用包含FALSE,FALSE,0,0的行填充数据集的顶部,然后将该公式添加到从第一行开始的第四列:

 =IF(AND(NOT(A2),NOT(B2),OR(D1=0,AND(NOT(A1),B1))),0,C1) 

这是假设您的第一行是第2行,第1行用于填充。 A,B和C是你的例子中的三列,D将打印第三列的值,如果它在一个子集内,或者如果不是,那么你可以很容易地计算出max()或任何你想要的做。 我看起来像这样:

在这里输入图像说明