我试图根据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语句识别范围的子集。我还想知道,如果声明可能从底部到顶部,那么这是否可以从顶部到底部工作。任何帮助都将非常感激。
答案 0 :(得分:1)
第1部分可以使用MATCH
,OFFSET
和MAX
对于此示例,我假设您的数据位于从单元格A2
开始。
为了清楚起见,我在单元格E1:E4
中使用了一些中间结果。如果您更喜欢单个公式,只需将中间公式合并到最终公式
单元格E2
=第TRUE
列中第一个A
的位置
=MATCH(TRUE,A2:A11,0)
单元格E3
=第TRUE
列中第一个B
的位置
=MATCH(TRUE,B2:B11,0)
结果公式,C
和E2
(包括)中找到的行之间的列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)
结果公式,C
和E3
(包括)中找到的行之间的列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()或任何您想要的值做。我看起来像这样: