从查找表

时间:2017-02-10 20:27:52

标签: excel excel-formula

我有一个Excel工作表,其中包含如下表格:

Index Threshold
1     0
2     10
3     20
...

然后我有另一张表格值:

Values
5
11
14
22

我想要的是实现一个映射"值"的公式。达到最大"指数"这可能不会超过"阈值",例如:

Values    Threshold    Index
5      -> 0         -> 1
11     -> 10        -> 2
14     -> 10        -> 2
22     -> 20        -> 3

我认为我可以实现IF()的二叉树,成本为log(n),但处理起来非常麻烦且难以处理。例如(T*是阈值,V*是值,I*是索引):

IF(V1 < T3;IF(V1 < T2;I1;I2);IF(V1 < T4;I3;I4))

这是一个平衡的IF()树,如:

          T3
        /    \
     T2        T4
    /  \      /  \
  I1    I2  I3    I4

有更好(更实用)的方式来实现这个吗?

这只是我正在处理的实际工作表的要点。真实数据是二维的,分布在许多页面上,并且要大得多(数百个阈值和数千个值)。

特别是复制和粘贴很难处理(创建,测试和维护)。

编辑:实际解决方案

所以,这是在对此事进行一些研究之后,我想展示对我有用的解决方案。 MATCH()函数是基本的,但还不够。

首先,阈值并不表示最大允许值,而是最低要求值。因此标题具有误导性。我必须做的是:

  • 反转阈值范围;
  • MATCH()-1比较类型一起使用。

要反转我使用此公式的范围,请占用F2:F102范围内的单元格:

INDEX(C$2:C$102;COUNTA(C:C)+1-ROW())

与我使用的匹配:

MATCH(D2;F$2:F$102;-1)

这最后一场比赛没有INDEX(),因为返回的偏移已经是我需要的了。

感谢Scott Craner让我走上了正确的轨道!

1 个答案:

答案 0 :(得分:1)

使用INDEX / MATCH:

=INDEX(A:A,MATCH(E2,B:B,1))

您可能需要使用;代替,进行本地设置:

=INDEX(A:A;MATCH(E2;B:B;1))

enter image description here

相关问题