【发布时间】:2019-11-06 10:18:35
【问题描述】:
我正在尝试在 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 更改为一个 X,以选择实际指导比赛的人。
为了概述,我决定添加一个列,其中将显示所选教练。我对第 2 行使用了以下公式:=LOOKUP("X"; B2:D2; B$1:D$1) 并将其复制到其他行,以便每行的行号与放置公式的行相对应。
令我惊讶的是,第 4 场比赛被分配给了 Chris,而 John 有一个 X,而 Chris 只有一个 A。
当我阅读Microsoft's documentation on LOOKUP 时,我注意到了一些事情:
- LOOKUP 具有向量形式和数组形式。微软建议对数组形式使用 HLOOKUP,但我使用向量形式。我不认为 HLOOKUP 对我有用,因为它只在指定数组的第一行中查找值,而我的第一行包含要返回的值。
- 上面写着:“一个只包含一行或一列的范围。”,还有“重要提示:lookup_vector 中的值必须按升序排列:..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE;否则,LOOKUP 可能不会返回正确的值。大写和小写文本是等效的。"
我认为 2. 是导致问题的原因。我不确定如何对 A2:A4 之类的范围参数进行排序。微软记录了SORT function,但它是测试版。另外,无论如何,我认为对搜索行进行排序会弄乱匹配。
我找到的解决方法是将我的代码更改为 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
这是我想要的结果。
谁能阐明这种完全违反直觉的行为和/或描述实现这一目标的替代方法?
注意事项:
- 我注意每行只放 1 个 X。
- 我在 Microsoft Excel for Office 365 MSO (16.0.11328.20362) 64 位和 Microsoft Excel 2016 MSO (16.0.12130.20232) 32 位中看到了这一点。
【问题讨论】:
-
这里的诀窍是
The values in lookup_vector must be placed in ascending order:A-Z,它解释了为什么当您在 A(第 4 行)之前使用 X 时,它会首先返回值 A。在第 3 行,因为它们被正确排序,所以你得到了正确的结果。这也解释了为什么在使用A,B而不是A,X时会得到结果。但是只要这 3 个单元格中的顺序是 A-Z,您就会得到正确的结果。否则,结果将是错误的。实现这一目标的最佳方法确实是@Rory 答案。
标签: excel excel-formula