从查找表中获取最大值
我有一个像这样的表的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
我想我可以用log(n)
的代价实现一个IF()
的二叉树,但是处理起来非常麻烦和笨拙。 例如( T*
是阈值, V*
是值, I*
是指数):
IF(V1 < T3;IF(V1 < T2;I1;I2);IF(V1 < T4;I3;I4))
这是一个平衡的IF()
树,如:
T3 / \ T2 T4 / \ / \ I1 I2 I3 I4
有更好的(更有用的)方法来实现这个吗?
这只是我正在工作的实际工作表的要点。 真实的数据是二维的,分布在许多页面上,并且远大于(数百个阈值和数千个值)。
特别是复制和粘贴非常难以处理(创build,testing和维护)。
编辑:实际的解决scheme
所以,这是在对这个问题进行了一些研究之后,我想展示为我工作的解决scheme。 MATCH()
函数是基本的,但还不够。
首先,阈值并不表示最大允许值,而是最小要求值 。 因此,标题是误导性的。 我所要做的是:
- 反转阈值范围;
- 与
-1
比较types一起使用MATCH()
。
为了反转我使用此公式的范围,占用F2:F102
范围内的单元格:
INDEX(C$2:C$102;COUNTA(C:C)+1-ROW())
为了匹配我用过的:
MATCH(D2;F$2:F$102;-1)
最后一个匹配没有INDEX()
因为返回的偏移量已经是我所需要的了。
感谢Scott Craner让我走上正轨!
使用INDEX / MATCH:
=INDEX(A:A,MATCH(E2,B:B,1))
您可能需要使用;
而不是,
为您的本地设置:
=INDEX(A:A;MATCH(E2;B:B;1))