我在Excel中构建一个不寻常的查找公式时遇到了问题。
通常情况下,我会使用VLOOKUP(),但缺点是我想从一个在另一个列上排序的表中的列中查找一个数字。 Vlookup只能在排序列本身上查找内容。
方案如下:
表格(部分关闭,完整的表格要大得多):
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
我已经尝试了Array Formula's(也称为“ctrl-shift-enter formula's”),并构建了类似的内容:
{=INDEX(table;
MATCH(MIN(IF(columnA-$C1>=0;columnA;FALSE));
IF(columnA-$C1>=0;columnA;FALSE);
0);
2)}
C1 包含我的参数,表范围A1:B9, columnA 范围B1:B9
但是这不起作用(在上面的示例中,它返回12.0因为MIN()函数选择了1280)。
解决方案我不想使用: 我可以写一些VBA可以通过表格,但我不想这样做(因为恼人的'宏警告',并且因为Mac上的Excel不再支持VBA)
有人有任何线索吗?
答案 0 :(得分:4)
您可以使用
{=INDEX(B1:B9,MIN(IF(A1:A9>C1,ROW(A1:A9),FALSE)))}
请注意,我使用的是英国英语设置 - 您必须更改公式以匹配您的语言环境,用分号替换逗号等。
答案 1 :(得分:1)
如果你不想要一个数组公式你可以尝试= OFFSET($ C $ 5,MATCH($ A $ 17,B5:B13),0)其中C5是你的B列的开头,B5:B13就是你列和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)),MIN(MATCH($ A $ 17,B5:B13,0)-1,MATCH($ 17美元,B5:B13))),0)
答案 2 :(得分: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)))
我对此进行了编辑,以便在查找值小于列表中的任何值时进行说明。