多个条件索引匹配

时间:2017-01-13 11:55:29

标签: excel excel-formula excel-2010

我花了好几个小时试图解决这个问题,在线发现文章,但它们似乎没有用。

我有一个excel文档,其中包含两个标签上的数据,并希望以下公式向我展示如果日期和用户ID匹配两个表格上的人员,则称为“提升的来源”& “Sheet 1中”

{=INDEX(Sheet1!F:F,MATCH('Raised Source'!E:E&'Raised Source'!F:F,Sheet1!A:A&Sheet1!B:B,0))}

这会抛出#N / A错误

帮助!!!

1 个答案:

答案 0 :(得分:3)

首先,我假设您的数据采用以下格式:

enter image description here enter image description here

您希望使用'Raised Source'!中的数据执行搜索,以搜索Sheet1!并从Sheet1!返回该小组。

公式:

公式将需要作为数组输入(一旦复制并粘贴,但仍然在公式栏中点击 CTRL + SHIFT + ENTER

=IFERROR(INDEX(Team,MATCH(1,(E1=TeamDate)*(F1=UserID),0)),"")

我使用命名范围来使公式更整洁:

Team      =Sheet1!$F$1:$F$6
TeamDate  =Sheet1!$A$1:$A$6
UserID    =Sheet1!$B$1:$B$6

请注意,当在整个列上使用数组公式时,计算速度会显着减慢,因此最好避免这种情况,并定义您正在搜索的确切范围,如果您希望添加,则将其推算为合理的数量。

逻辑:

=INDEX(array,row,[column]) - 此公式将'索引' 您指定的数组,您可以告诉它您想要返回的行号和列号(例如{{ 1}}将返回=INDEX(B3:C4,1,1) B3:C4的第一行和第一列中的值。如果我们只想返回第一列,或者我们不需要告诉公式一列如果我们要查找的数据只有1列宽。

这是公式的来源。我们使用B3公式来告诉我们要查找的值的位置(或者在这种情况下是哪一行)。

MATCH(lookup_Value,Lookup_array,[match_type])的正常使用将匹配范围内的确切单元格内容但是由于我们使用数组公式,我使用MATCH()

进行了一些小技巧

所以,我告诉公式找MATCH(1,(E1=TeamDate)*(F1=UserID),0)并告诉我它发生的位置。如果两个条件与Excel公式匹配,则会返回11代表TRUE1代表FALSE。当此公式逐行执行时,如果两个结果匹配并返回0,那么数组将存储TRUE 1*1,当然如果其中一个或两个都是1然后它会返回FALSE1*00*1,所有这些都会导致0*0

由于命名范围都在同一行开始,因此相对位置(或0出现的次数)始终是您希望1公式返回的行号。

INDEX() - 如果未找到匹配项,则公式将抛出错误,因为它无法将IFERROR(value,value_if_error)与我构建的数组匹配。如果发生这种情况,我告诉公式我希望它返回1而不是空白单元格。您可以将此更新为您希望的任何文字,可能是,"")

另一个答案的公式中的另一个IF()特定于该问题,因为他们只想知道有匹配而不是从该行返回一些内容。

<强>输出:

enter image description here