我正在尝试在Excel中完成一个相当简单的任务,但是没有得到想要的结果。我有一个简单的时间表,通过填写一张简单的表格,我可以将一组教练分配给一系列比赛。这是缩小版本:
Match | John | Pete | Chris |
-------|------|------|-------|-------
1 | X | | | John
2 | | X | | Pete
3 | A | | X | Chris
4 | X | | A | Chris (!)
5 | | X | A | Pete
传奇:X:将执教; A:可用。
我使用该表注册可用性,然后在每行中将A更改为X,以选择实际指导比赛的人。
为进行概述,我决定添加一列,其中将显示所选教练。我使用以下公式:=LOOKUP("X"; B2:D2; B$1:D$1)
用于第2行,并将其复制到其他行,以便每行的行号与放置公式的行相对应。
令我惊讶的是,第4场比赛分配给了Chris,而John拥有X,而Chris只有A。
当我阅读Microsoft's documentation on LOOKUP时,我注意到了一些事情:
我认为2.是导致问题的原因。我不确定如何对A2:A4之类的范围参数进行排序。 Microsoft记录了SORT function,但它是beta。另外,我认为对搜索行进行排序将使匹配变得混乱。
我找到的解决方法是将代码更改为A:分配和B:备份,其中选择A和B为按字母顺序递增。如果我更改公式以使用查找值“ A”,则会得到以下信息:
Match | John | Pete | Chris |
-------|------|------|-------|-------
1 | A | | | John
2 | | A | | Pete
3 | B | | A | Chris
4 | A | | B | John
5 | | A | B | Pete
这是我想要的结果。
有人可以阐明这种完全违反直觉的行为和/或描述实现此目的的替代方法吗?
注意:
答案 0 :(得分:4)
根据文档,LOOKUP完全按照设计的目的进行工作。您应该使用INDEX
和MATCH
:
=INDEX($B$1:$D$1;MATCH("X";B2:D2;0))
MATCH的最后一个0参数表示您正在寻找完全匹配的数据,因此不需要对数据进行排序。
答案 1 :(得分:2)
LOOKUP进行二进制搜索,因此返回A。我们在Chandoo.org论坛上进行了很长的讨论,您可以在这里阅读: https://chandoo.org/forum/threads/how-vlookup-works.18378/
基本上,它一直在寻找一个相等或更低的值,然后继续对数据进行切片,因此需要对数据进行排序。
您仍然可以通过如下调整来使用LOOKUP。
=LOOKUP(2;1/(B2:D2="X");B$1:D$1)