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

时间:2012-12-10 02:22:58

标签: excel subset

我试图根据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函数来识别第三列中的MAX。我会使用IF语句来确定第一个TRUE语句是否正确但是,我无法弄清楚如何根据第二列中的TRUE语句识别范围的子集。我还想知道,如果声明可能从底部到顶部,那么这是否可以从顶部到底部工作。任何帮助都将非常感激。

2 个答案:

答案 0 :(得分:1)

第1部分可以使用MATCHOFFSETMAX

的组合来完成

对于此示例,我假设您的数据位于从单元格A2开始。

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

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

=MATCH(TRUE,A2:A11,0)

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

=MATCH(TRUE,B2:B11,0)

结果公式,CE2(包括)中找到的行之间的列E3中的最大值

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

第2部分更棘手:我认为你不能在范围内搜索某个值。但是,查看您的数据可能可以搜索 second TRUE吗?如果这样就可以了:

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

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

或者这个,作为数组公式(由Barry Insipred)输入,其中获取列中的最后一个TRUE

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

结果公式,CE3(包括)中找到的行之间的列E4中的最大值

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

答案 1 :(得分:0)

关于从底部向上遍历表格的部分让我感到困惑,也不知道你是否可以拥有多个子集,因为你倒数第二行似乎是一个未关闭的新子集的开头。无论如何,希望这有帮助。我假设你不想使用宏,在这种情况下它将是微不足道的。你可以做的是用数据集的顶部填充一个包含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()或任何您想要的值做。我看起来像这样:

enter image description here