2

我在 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

我用数组公式(也称为“ctrl-shift-enter 公式”)尝试了我的运气,并构造了这样的东西:

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

C1包含我的参数,表格范围 A1:B9,A范围 B1:B9

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

我不想使用的解决方案: 我可以编写一些 VBA 来遍历表格,但我不想这样做(因为烦人的“宏警告”,并且因为 Mac 上的 Excel 不再支持 VBA )

有人有任何线索吗?

4

3 回答 3

4

您可以使用

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

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

于 2009-12-15T15:06:36.950 回答
1

如果您不想要数组公式,您可以尝试 =OFFSET($C$5,MATCH($A$17,B5:B13),0) 其中 C5 是 B 列的开始,B5:B13 是 A 列和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)), 最小(比赛($A$17,B5:B13,0)-1,比赛($A$17,B5:B13))),0)

于 2009-12-15T15:24:35.527 回答
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)))

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

于 2009-12-15T15:40:24.873 回答