我有一个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让我走上了正确的轨道!