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中引入的。它在早期版本中不可用。