我在寻找 LOOKUP 从上到下搜索列的方法时遇到问题。情况是这样的。我需要为 Excel 创建一个公式来搜索句子中的硬件部分。
示例:
Sentence (A1)
block 引用>Customer PC can't turn on. Check motherboard. Motherboard faulty. Replace motherboard. PSU don't have enough power. Replace PSU.
这里是查找范围列(硬件)
- 更换电源
- 更换主板
结果范围列(HARDWARE_PART)
- 电源
- 主板
我使用的公式是
LOOKUP(9999;SEARCH(HARDWARE;A1);HARDWARE_PART)
结果将是“主板”。因为LOOKUP会从下到上搜索列。
我现在要做的是让 LOOKUP 从上到下搜索该列,以便它可以检测到另一个替换部件。
最佳答案
使用命名范围是一个很好的步骤;动态命名范围甚至更好。然而,它们通过尝试将正确的相对行号返回到INDEX function而产生困惑,从而带来了问题。当它们不在第一行开始时。
我的两个命名范围(例如 HARDWARE 和 HARDWARE_PART)使用引用:公式为,
=Sheet1!$AA$2:INDEX(Sheet1!$AA:$AA, MATCH("zzz",Sheet1!$AA:$AA))
=Sheet1!$AB$2:INDEX(Sheet1!$AB:$AB, MATCH("zzz",Sheet1!$AA:$AA))
这需要将返回的行修改 1,因为它们从第二行开始。
B1中的标准公式是,
=IFERROR(INDEX(HARDWARE_PART, AGGREGATE(15, 6, (ROW(HARDWARE)-1)/ISNUMBER(SEARCH(HARDWARE, $A1)), COLUMN(A:A))), "")
按优先级降序填充后续匹配项的右侧。
安IFERROR function “wrapper”可以通过用零长度字符串替换错误返回来避免在不匹配时显示 #NUM!
错误。
如果您想反转优先级,请交换 15 ( SMALL function ) AGGREGATE¹ 14 选项 ( LARGE function )。
xl2010 之前的附录
对于无法使用 AGGREGATE 函数的 Excel 版本,此标准非 CSE 公式会重复结果。在B1中,
=IFERROR(INDEX(HARDWARE_PART, SMALL(INDEX(ROW(HARDWARE)-1+ISERROR(SEARCH(HARDWARE, $A1))*1E+99, , ), COLUMN(A:A))), "")
<小时/>
¹ AGGREGATE function是随 Excel 2010 引入的。它在早期版本中不可用。
关于excel - MS Excel 从上到下查找列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37108081/