1

我正在尝试根据 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 语句来识别范围的子集。我还想知道从上到下是否可行,如果该语句可能从下到上起作用。非常感激任何的帮助。

4

2 回答 2

1

第 1 部分可以使用和的组合MATCH来完成OFFSETMAX

对于此示例,我假设您的数据位于从 cell 开始A2

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

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

=MATCH(TRUE,A2:A11,0)

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

=MATCH(TRUE,B2:B11,0)

结果公式,在和(含)C中找到的行之间的列中的 最大值E2E3

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

第 2 部分更棘手:我认为您不能在范围内搜索。但是,查看您的数据是否可以搜索第二个 TRUE?如果这没问题,那么:

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

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

或者这个,作为数组公式输入(由 Barry 启发),它将获得TRUE列中的最后一个

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

结果公式,在和(含)C中找到的行之间的列中的最大值E3E4

=MAX(OFFSET($C$1,E3,0,E4+E2-E3+1,1))
于 2012-12-10T04:56:49.217 回答
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() 或任何您想要的做。我看起来像这样:

在此处输入图像描述

于 2012-12-10T03:29:13.913 回答