Excel:需要有关异常查找功能的帮助(已排序列与查阅列不同)

时间:2009-12-15 14:36:22

标签: excel lookup excel-formula worksheet-function

我在Excel中构建一个不寻常的查找公式时遇到了问题。

通常情况下,我会使用VLOOKUP(),但缺点是我想从一个在另一个列上排序的表中的列中查找一个数字。 Vlookup只能在排序列本身上查找内容。

方案如下:

  • 该表按B列升序排序。
  • 对于给定的参数P,我现在想要找到第一个A值,从顶部开始向下,大于或等于该参数P.
  • 然后该函数应返回相应的B值。

表格(部分关闭,完整的表格要大得多):

    A      B
1  640    4.5
2  1600   7.0
3  640    7.5
4  1280   12.0
5  1920   16.5
6  2560   21.0
7  1600   19.8
8  3200   26.8
9  4800   33.8

例如,假设我的参数是1100,那么我希望我的公式返回7.0,因为在A列中向下搜索大于或等于1100的第一个条目是1600,具有相应的B值7.0

我已经尝试了Array Formula's(也称为“ctrl-shift-enter formula's”),并构建了类似的内容:

{=INDEX(table;
        MATCH(MIN(IF(columnA-$C1>=0;columnA;FALSE));
              IF(columnA-$C1>=0;columnA;FALSE);
              0);
        2)}

C1 包含我的参数,范围A1:B9, columnA 范围B1:B9

但是这不起作用(在上面的示例中,它返回12.0因为MIN()函数选择了1280)。

解决方案我不想使用: 我可以写一些VBA可以通过表格,但我不想这样做(因为恼人的'宏警告',并且因为Mac上的Excel不再支持VBA)

有人有任何线索吗?

3 个答案:

答案 0 :(得分:4)

您可以使用

{=INDEX(B1:B9,MIN(IF(A1:A9>C1,ROW(A1:A9),FALSE)))}

请注意,我使用的是英国英语设置 - 您必须更改公式以匹配您的语言环境,用分号替换逗号等。

答案 1 :(得分:1)

如果你不想要一个数组公式你可以尝试= OFFSET($ C $ 5,MATCH($ A $ 17,B5:B13),0)其中C5是你的B列的开头,B5:B13就是你列和A17是您要匹配的值。

Ninja编辑:这是一个适用于规范的小于或等于位的版本。 = OFFSET($ C $ 5,IF(ISNA(MATCH($ A $ 17,B5:B13,0)),IF(ISNA(MATCH($ A $ 17,B5:B13)),0,MATCH($ A $ 17,B5 :B13)),MIN(MATCH($ A $ 17,B5:B13,0)-1,MATCH($ 17美元,B5:B13))),0)

答案 2 :(得分:0)

假设数据表在A2:B10范围内,使用您在单元格B1中搜索的值,以下似乎有效:

 =IF(B1<A2,B2,IF(ISNA(VLOOKUP(B1,$A$2:$B$10,2,FALSE)),INDEX(B2:B10,MATCH(B1,A2:A10)+1),VLOOKUP(B1,$A$2:$B$10,2,FALSE)))

我对此进行了编辑,以便在查找值小于列表中的任何值时进行说明。