excel:如果单元格包含多个条件,则 return 多个条件,嵌套?

excel: if cell contains multiple criteria then return multiple criteria, nestled?

我有 4 个标准列表,如下所示:

A         B
Name      Category
Name      Category
Name      Category

还有像这样的 MasterList:

A             B
stuffNAME     Category
NAMEstuff     Category
NAME          Category

我想知道是否有一个公式可以根据 MasterlistA 列在每个条件列表中搜索 "NAME" 和 return MasterlistB 中适当的 "Category"。

举个例子: 我正在寻找 return 基于 MasterlistA

的 MasterlistB

条件列表:

A         B
NBC       NBCU
Disney    ABC

大师名单:

A                  B   
NYC NBC 20998      NBCU
NJ2987 NBC         NBCU
Disney Florida99   ABC

我正在简化,但实际上标准列表也都引用不同的主列表列。试着先把 matching/searching 部分弄下来。

您可以使用嵌套在 IFERROR 语句中的 VLOOKUP 来做到这一点

我假设每个 table 都从 A1 开始,在 sheet 中称为 Sheet1、Sheet2、Sheet3 和 Sheet4。您可能需要调整引用以指向适当的 tables.

查找与您的姓名匹配的类别的基本公式很简单[假设您的搜索词在 A1 上的新 sheet 上,比方说 Sheet5,其余的最终数据 table]:

=VLOOKUP(A1,'Sheet1'!A:B,2,0)

这只是获取 A1 [搜索词] 中的值,尝试在 sheet 1 的 A 列中找到它,如果确实找到了,则获取第一个匹配行,然后 returns [B 列,带有类别] 中第 2 列的值。

如果失败,您只需将其放入 IFERROR 中,它会尝试计算某些内容,如果它产生错误,returns 其他内容,例如:

=IFERROR(VLOOKUP(A1,'Sheet1'!A:B,2,0),"NO MATCH FOUND")

现在要使用 IFERRORS 首先尝试在 Sheet1 上找到匹配项,然后在 Sheet2 等上找到匹配项,输入以下内容:

=IFERROR(VLOOKUP(A1,'Sheet1'!A:B,2,0),IFERROR(VLOOKUP(A1,'Sheet2'!A:B,2,0),IFERROR(VLOOKUP(A1,'Sheet3'!A:B,2,0),VLOOKUP(A1,'Sheet4'!A:B,2,0))))

要仅搜索部分匹配项,您可以使用以下

=VLOOKUP("*"&A1&"*",'Sheet1'!A:B,2,0)

“*”的作用类似于通配符,如果它们包含在您的搜索词前后 [在本例中为 A1],则包含您的搜索词的任何内容,无论其在单元格中的位置如何,将被视为一场比赛。您可以将我上面所有公式中的 A1 替换为修改后的通配符匹配,以检查任何 sheet 中的部分匹配。

搜索与您的搜索词 部分 完全匹配的项目列表

你或许可以用数组公式来做到这一点,但因为你有多个数据 tables,我认为最简单的解决方案是在每个 tables 旁边使用一个辅助列, 创建一个与您的主列表实际匹配的唯一 ID。即:

在 Sheet1 [和所有其他类别 sheets] 上,在 A 和 B 之间插入一个新列;此列将从 A 列追溯,以匹配 Sheet5 上主列表中的名称,就像这样 [从 B1 开始并向下复制]:

=VLOOKUP("*"&A1&"*", 'Sheet5'!A:A, 1, 0)

您在母版 sheet 中修改后的公式现在看起来像这样:

=IFERROR(VLOOKUP(A1,'Sheet1'!B:C,2,0),IFERROR(VLOOKUP(A1,'Sheet2'!B:C,2,0),IFERROR(VLOOKUP(A1,'Sheet3'!B:C,2,0),VLOOKUP(A1,'Sheet4'!B:C,2,0))))

而不是像这样并排放置四个列表:

将它们堆叠在一起,如:

它很简单:

=VLOOKUP("David",A1:B12,2)

所以这是获得你想要的东西的基本公式:

=INDEX($B:$B,AGGREGATE(15,6,ROW(:)/(ISNUMBER(SEARCH("*" & $A:$A & "*",D1))),1))

如果您有 2010 或更高版本。如果您使用的是 2007 年及更早版本,则需要使用以下数组公式:

=INDEX($B:$B,SMALL(IF(ISNUMBER(SEARCH("*" & $A:$A & "*",D1)),ROW(:)),1))

它是一个数组公式,必须用 Ctrl-Shift-Enter 确认。

图中第一个公式在F列,第二个在E列

您需要为各种工作表添加嵌套的 IFERROR() 函数。

=IFERROR(INDEX(Sheet1!$B:$B,AGGREGATE(15,6,ROW(:)/(ISNUMBER(SEARCH("*" & Sheet1!$A:$A & "*",A1))),1)),IFERROR(INDEX(Sheet2!$B:$B,AGGREGATE(15,6,ROW(:)/(ISNUMBER(SEARCH("*" & Sheet2!$A:$A & "*",A1))),1)),IFERROR(INDEX(Sheet3!$B:$B,AGGREGATE(15,6,ROW(:)/(ISNUMBER(SEARCH("*" & Sheet3!$A:$A & "*",A1))),1)),IFERROR(INDEX(Sheet4!$B:$B,AGGREGATE(15,6,ROW(:)/(ISNUMBER(SEARCH("*" & Sheet4!$A:$A & "*",A1))),1)),"NOT HERE"))))

给定一个如@ScottCraner 的回答所示的设置:

在单元格 E1 中向下复制:

=IFERROR(LOOKUP(1,1/COUNTIF(D1,"*"&$A:$A&"*"),$B:$B),"No Match")

这是一个常规公式,不需要数组输入。