是否有识别重复数字的 VLOOKUP 之类的东西?
Is there such thing as a VLOOKUP that recognises repeated numbers?
我在 excel TAB 的 A 列中有一个值列表,在它旁边的 B 列中有一个单词列表。在另一个 TAB 上,我试图从 B 中检索单词,其中 A 具有最小值,然后是第二个较小的值,第三个,依此类推。
示例:A 列有 (2,3,3,6,8) 和 B 列(汽车、狗、猫、房子、船)
我首先创建了一个列,我在其中检索了最小值:
- 在列 X1 我添加了:
SMALL('Table'!$A:$A,1)
- 在列 X2 我添加了:
SMALL('Table'!$A:$A,2)
- 等...
然后 VLOOKUP 对我有用:
- 在列 Y1 我添加了:
VLOOKUP(X1,'Table'!$A:$B,2,FALSE)
- 在列 Y2 我添加了:
VLOOKUP(X2,'Table'!$A:$B,2,FALSE)
到目前为止一切顺利。我的问题是当我的价值观重复时。 *IE。:
在上面的示例中,每当函数在 A 列中找到值 3 时,我都会得到单词 dog 两次,而不是 dog 和 cat 因为它只显示 vlookup 找到的第一个值。
我试过添加一个偏移量:=OFFSET(SMALL('Table'!$A:$A,1),1,0)
但不确定它是否可以从其他 TABS 中获取。
请提供任何帮助或解决方法?非常感谢。
我建议使用 Index/match 而不是 VLOOKUP,如果相同的值以前出现过一次,则将一个添加到匹配位置,如果之前出现过两次,则添加两个,等等:-
=INDEX(Table!B:B,MATCH(A2,Table!A:A,0)+COUNTIF(A:A1,A2))
您也可以使用类似这样的方法来获取最小值、第二小值等,而不是对其进行硬编码:-
=SMALL(Table!$A:$A,ROW(1:1))
好吧,我要用来分隔具有相等值的行的技巧是向每一行添加少量以使值唯一。这是我的公式:-
=LARGE(IF(A:A="Restaurants",C:C),ROW(1:1))
取最大值,这是标准公式
=INDEX(D:D,MATCH(LARGE(IF(A:A="Restaurants",C:C+ROW(C:C)/10^7),ROW(1:1)),C:C+ROW(C:C)/10^7,0))
获取匹配的城市。即使相等的值不在相邻的行中,这也会起作用。
我不知道您的实际数据中有多少行,如果超过 100 行,您需要使用小于 .01 的行数。
请注意,这些是数组公式,需要使用 CtrlShiftEnter[=44= 输入]
对于最小的,只需将 LARGE 更改为 SMALL。
如果您想排除任何非数字值,例如 "not ranked",您需要
=INDEX(D:D,MATCH(LARGE(IF((A:A="Restaurants")*ISNUMBER(C:C),C:C+ROW(C:C)/10^7),ROW(1:1)),C:C+ROW(C:C)/10^7,0))
我不建议将其更改为使用 D:D、C:C 等,因为它会很慢,但它会起作用。
我在 excel TAB 的 A 列中有一个值列表,在它旁边的 B 列中有一个单词列表。在另一个 TAB 上,我试图从 B 中检索单词,其中 A 具有最小值,然后是第二个较小的值,第三个,依此类推。
示例:A 列有 (2,3,3,6,8) 和 B 列(汽车、狗、猫、房子、船)
我首先创建了一个列,我在其中检索了最小值:
- 在列 X1 我添加了:
SMALL('Table'!$A:$A,1)
- 在列 X2 我添加了:
SMALL('Table'!$A:$A,2)
- 等...
然后 VLOOKUP 对我有用:
- 在列 Y1 我添加了:
VLOOKUP(X1,'Table'!$A:$B,2,FALSE)
- 在列 Y2 我添加了:
VLOOKUP(X2,'Table'!$A:$B,2,FALSE)
到目前为止一切顺利。我的问题是当我的价值观重复时。 *IE。: 在上面的示例中,每当函数在 A 列中找到值 3 时,我都会得到单词 dog 两次,而不是 dog 和 cat 因为它只显示 vlookup 找到的第一个值。
我试过添加一个偏移量:=OFFSET(SMALL('Table'!$A:$A,1),1,0)
但不确定它是否可以从其他 TABS 中获取。
请提供任何帮助或解决方法?非常感谢。
我建议使用 Index/match 而不是 VLOOKUP,如果相同的值以前出现过一次,则将一个添加到匹配位置,如果之前出现过两次,则添加两个,等等:-
=INDEX(Table!B:B,MATCH(A2,Table!A:A,0)+COUNTIF(A:A1,A2))
您也可以使用类似这样的方法来获取最小值、第二小值等,而不是对其进行硬编码:-
=SMALL(Table!$A:$A,ROW(1:1))
好吧,我要用来分隔具有相等值的行的技巧是向每一行添加少量以使值唯一。这是我的公式:-
=LARGE(IF(A:A="Restaurants",C:C),ROW(1:1))
取最大值,这是标准公式
=INDEX(D:D,MATCH(LARGE(IF(A:A="Restaurants",C:C+ROW(C:C)/10^7),ROW(1:1)),C:C+ROW(C:C)/10^7,0))
获取匹配的城市。即使相等的值不在相邻的行中,这也会起作用。
我不知道您的实际数据中有多少行,如果超过 100 行,您需要使用小于 .01 的行数。
请注意,这些是数组公式,需要使用 CtrlShiftEnter[=44= 输入]
对于最小的,只需将 LARGE 更改为 SMALL。
如果您想排除任何非数字值,例如 "not ranked",您需要
=INDEX(D:D,MATCH(LARGE(IF((A:A="Restaurants")*ISNUMBER(C:C),C:C+ROW(C:C)/10^7),ROW(1:1)),C:C+ROW(C:C)/10^7,0))
我不建议将其更改为使用 D:D、C:C 等,因为它会很慢,但它会起作用。