【问题标题】:Return first cell in range between target values返回目标值之间范围内的第一个单元格
【发布时间】:2015-11-18 03:42:47
【问题描述】:

我想获取介于两个值之间的范围内的第一个单元格的值。 我能做的最好的就是获得第一个小于或大于某个值的单元格。我想要第一个既大于一个值又小于另一个值的单元格。 这不起作用(因为它只有 1 个标准):

{=INDEX(A1:A10,MATCH(TRUE,A1:A10<B1,0))}

注意:A1:A10 是值的范围,B1 是比较

我试过了:

{=INDEX(A1:A10,MATCH(TRUE,and(A1:A10<B1,A1:A10>B2),0))}

但它不起作用。

感谢您的帮助。

【问题讨论】:

  • 你可以使用辅助列吗?
  • 是的,如果需要,我可以。
  • @chrisneilsen 我在没有访问 excel 的情况下编写了它,但是当我尝试它时,我得到一个 #N/A 错误,所以我猜它没有
  • @chrisneilsen 你是对的!我只是在我的示例中混淆了最小和最大数字!

标签: excel worksheet-function


【解决方案1】:

试试这个:

{=INDEX(A1:A10,MATCH(1,(A1:A10<B1)*(A1:A10>B2),0))}

请注意,它是一个数组公式,因此您不必写{},但是当您输入公式时,请使用Ctrl+Shift+Enter

【讨论】:

    【解决方案2】:

    它适用于您在工作表中的任何地方。

    =INDEX(A1:A10,SMALL(IF(A1:A10>=B1,IF(A1:A10<=B2,ROW(A1:A10)-ROW(A1)+1)),ROWS(A1:A1)))
    

    【讨论】:

      【解决方案3】:

      使用AGGREGATE¹ function 代替MATCH 将相对行位置返回到INDEX

      =INDEX($A$2:$A$11, AGGREGATE(15, 6, ROW($1:$10)/(($A$2:$A$11<$B$1)*($A$2:$A$11>$B$2)), ROW(1:1)))
      

      这会将不匹配的行号强制为#DIV/0! 错误。 6 选项告诉 AGGREGATE 忽略错误。

      由于这使用 AGGREGATE 的 SMALL,增加 k 参数将在您向下填充 ROW(1:1) 时产生第二个、第三个等匹配项。

           

      请注意,我已将您的样本范围向下移动了一行。这样做是为了说明ROW(1:10) A2:A11 中的位置,而不是工作表上的实际行号。


      ¹ AGGREGATE function 是随 Excel 2010 引入的。它在早期版本中不可用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多