MS Excel LOOKUP从上到下列
我有一个问题find一个方法让LOOKUP从上到下search栏。 这是情况。 我需要为Excel创build一个公式来search句子中的硬件部分。
例如:
句子(A1)
客户电脑无法开机。 检查主板。 主板故障 更换主板。 PSU没有足够的电力。 更换PSU。
这里是查找范围列(HARDWARE)
- 更换PSU
- 更换主板
结果范围列(HARDWARE_PART)
- PSU
- 母板
我使用的公式是
LOOKUP(9999;SEARCH(HARDWARE;A1);HARDWARE_PART)
结果将是“主板”。 因为LOOKUP会从下到上search列。
我现在要做的是LOOKUP从上到下search列,以便能够检测到另一个replace部分。
使用命名范围是一个好的步骤; dynamic命名范围甚至更好。 然而,他们提出了一个问题,通过产生混淆试图返回正确的相对行号为一个INDEX函数,当他们不在第一行开始。
我使用的两个命名范围(例如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函数的 “包装器”可以避免显示#NUM!
通过将错误返回replace为零长度的string而导致不匹配的错误。
如果您想改变优先级,换掉14 ( LARGEfunction )的15 ( 小function ) AGGREGATE¹选项。
pre-xl2010增编
对于不能使用AGGREGATE函数的Excel版本,此标准非CSE公式会复制结果。 在B1中,
=IFERROR(INDEX(HARDWARE_PART, SMALL(INDEX(ROW(HARDWARE)-1+ISERROR(SEARCH(HARDWARE, $A1))*1E+99, , ), COLUMN(A:A))), "")
¹AGGREGATEfunction是在Excel 2010中引入的。它在早期版本中不可用。