【问题标题】:Identify a subset of a range using TRUE statements使用 TRUE 语句识别范围的子集
【发布时间】:2012-12-10 02:22:58
【问题描述】:

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

【问题讨论】:

    标签: excel subset


    【解决方案1】:

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

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

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

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

    =MATCH(TRUE,A2:A11,0)
    

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

    =MATCH(TRUE,B2:B11,0)
    

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

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

    第 2 部分 更棘手:我认为您不能在 up 范围内搜索值。但是,查看您的数据是否可以向下搜索 second 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))
    

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 1970-01-01
      • 2023-03-23
      • 2014-08-11
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 2012-02-14
      相关资源
      最近更新 更多