我在 Excel 中有一列数据,其中的数字为 [0..100]。我需要一个新列,将其映射到一组新值,以便:
- > 90 :4
- 80-90 :3
- 70-79 :2
- 60-69 :1
- < 60 : 0
我尝试这样做查找,具体来说,使用测试输入77
和函数调用VLOOKUP(77, A10:B19, 2, TRUE)
,其中 A10 是此范围的左上角元素:
99 4 90 4 89 3 80 3 79 2 70 2 69 2 60 1 59 0 0 0
但是,我得到的结果为#N/A
。根据文档,这是因为
...lookup_value 中的值小于 table_array 第一列中的最小值...
然而,显然情况并非如此,因为我传递的是 77。但是,如果我使用测试输入79
,即查找表中明确存在的值,我就会得到正确的结果。
VLOOKUP 在这里是错误的方法吗?进行此类映射的最佳方法是什么?
我应该提到,我的输入值和查找表都是数字类型。
答案1
如果您使用 Index/Match 而不是 Vlookup,则可以使查找表保持降序排列,就像问题中所述。公式为
=INDEX(B1:B10,MATCH(77,A1:A10,-1))
以 -1 作为第三个参数的匹配将在表按降序排序时返回大于或等于查找值的值。
答案2
经过长时间的研究,我了解到查找表必须按升序排序。文档指出必须按升序排序,但没有指定排序顺序。除升序之外的任何排序都会导致错误#N/A
。