多条件索引匹配
我花了几个小时试图解决这个问题,在网上find文章,但他们似乎没有工作。
我有一个Excel文档,其中包含两个选项卡上的数据,并希望下面的公式向我展示团队成员如果两个表单上的date和用户ID匹配都称为“Raised Source”和“Sheet1”
{=INDEX(Sheet1!F:F,MATCH('Raised Source'!E:E&'Raised Source'!F:F,Sheet1!A:A&Sheet1!B:B,0))}
这会抛出一个#N / A错误
帮帮我!!!
首先我假设你的数据是这种格式的:
而你正在寻找使用'Raised Source'!
数据进行search'Raised Source'!
通过Sheet1!
searchSheet1!
并从Sheet1!
返回团队Sheet1!
以及。
公式:
该公式将需要作为一个数组input(一旦复制和粘贴,而仍然在公式栏按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
请注意,当在整列上使用数组公式时,计算速度会大大减慢,所以最好避免这种情况,并且如果您希望添加,则可以确定您正在search的确切范围,或者将其超过一个合理的值。
逻辑:
=INDEX(array,row,[column])
– 这个公式将索引你指定的数组,你可以告诉它你想返回的行号和列号(例如=INDEX(B3:C4,1,1)
将返回B3:C4
的第一行和第一列中的值,即B3
。如果我们只想返回第一列,或者如果我们正在查找的数据仅是结果,我们不需要告诉公式列1列宽。
这就是公式出现的地方。我们使用MATCH(lookup_Value,Lookup_array,[match_type])
公式来告诉我们在什么位置(或者在这种情况下哪一行)发生的值。
正常使用MATCH()
将匹配一个范围内的确切单元格内容,但是因为我们正在使用一个数组公式,所以我使用MATCH(1,(E1=TeamDate)*(F1=UserID),0)
所以,我已经告诉公式发现1
并告诉我它发生的位置。 两个条件都与Excel公式匹配时返回1
, TRUE
代表1
, FALSE
代表0
。 当这个公式工作通过行,如果两个结果匹配并返回TRUE
那么数组将存储1*1
这是1
,当然,如果其中一个或两个都是FALSE
那么它将返回1*0
0*1
或0*0
所有这些都导致0
。
由于命名范围全部从同一行开始,所以相对位置(或直到1
出现的次数)将始终是您希望INDEX()
公式返回的行号。
IFERROR(value,value_if_error)
– 如果找不到匹配项,则公式将抛出一个错误,因为它无法将1
与我创build的数组匹配。 如果发生这种情况,我已经告诉过这个公式,我希望它返回,"")
而不是一个空白单元格。 你可以更新这个任何你想要的文本,也许,"Not Found")
?
在另一个答案的公式中的另一个IF()是特定于这个问题的,因为他们只想知道有一个匹配,而不是从该行返回的东西。
输出: