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")
这是一个常规公式,不需要数组输入。
我有 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")
这是一个常规公式,不需要数组输入。