在第二个工作表中查找单元格matrix中的匹配项

我试图产生一个彼此相通的人的matrix。 在一个工作表中,我有matrix本身,另一个是原始数据。 需要的输出是在单元格中放置一个“x”,如果没有匹配,则不填充。

下面是matrix工作表的一个示例,其中A列中的名称与第1行中的名称相同。名称以“firstname middlename lastname”格式(通常为):

A | B | C | D | E ------------------------------------ 1| | Name1 | Name2 | Name3 | Name4 2| Name1 | | | | 3| Name2 | | | | 4| Name3 | | | | 5| Name4 | | | | 

以下是原始数据工作表的示例。 列A是名称的sorting列表,列B是他们与谁共同。 列表中有数百个名字:

  A | B ------------------------------------ 1| Name1 | Name33 2| Name1 | Name5 3| Name1 | Name21 4| Name2 | Name1 5| Name2 | Name92 ... 

我需要写入的公式进入matrix工作表中的空白单元格。 这里是最终输出的一个例子(尽pipe在实际的matrix中有更多的名字):

  A | B | C | D | E ------------------------------------ 1| | Name1 | Name2 | Name3 | Name4 2| Name1 | | | x | x 3| Name2 | x | | x | 4| Name3 | x | x | | 5| Name4 | | | x | 

这是我击中砖墙之前已经有多远了。 我试图编写一个VLOOKUP公式来做到这一点,但是如果我只是告诉它查看原始数据工作表的整个范围,它将不起作用,因为它会从错误的人手中获取匹配。 我只希望它匹配列B中那个在那个单元格的列A中有名字的部分。

所以,我能得到的最接近的就是从matrix中特定行上列出的名称的原始数据文件中放入特定范围。 例如,我手动在原始数据文件的A列中查找Name1,发现它存在于39-62行。 因此,对于Name1,如果在Raw_Data中的列B的第39-62行之间findmatrix的第1行的其中一个名称,则标记“x”:

 =IF(IFNA(VLOOKUP(B$1,Raw_Data!$B39:$B62,1,FALSE),"")="","","x") 

这只适用于我的matrix表中的一行。 然后,当进入下一行时,我必须手动查找该人的Raw_Data行并将其放入公式中。 诚然,它节省了一点时间,但没有达到如果我能得到这个公式在整个matrix中工作而没有任何改变的情况。

你可以在B2中使用这个COUNTIFS公式

=IF(SUMPRODUCT(COUNTIFS(Raw_Data!$A:$A,IF({1,0},B$1,$A2),Raw_Data!$B:$B,IF({0,1},B$1,$A2))),"X","")

当B1名称位于Raw_data的列A和列B中的A2名称时,COUNTIFS进行计数,反之亦然。 如果计数,如果> 0,那么有一场比赛,你会得到“x”

我假设你总是希望“x”出现在两个框中…..但在你的例子中,你只能在一个名称中显示,例如Name2 / Name1用“x”表示,而不是其他方式轮 – 如果这是它的方式,那么这是一个更简单的COUNTIFS像这样:

=IF(COUNTIFS(Raw_Data!$A:$A,$A2,Raw_Data!$B:$B,B$1),"X","")

我设法通过使用数组公式来实现这一点。 基本上你需要做的是使用名称(行和列)创build一个键,并在公式中的参考表上做同样的事情。 那么如果有一个以上的比赛,你把一个x。

 =IF(SUM(IF(OR($A2&B$1=$F$1:$F$2&$G$1:$G$2;$A2&B$1=$G$1:$G$2&$F$1:$F$2);1))>=1;"x";"") 

与往常一样,使用数组公式时,您需要在公式栏中按下CTRL + SHIFT + ENTER,以正确计算公式。

在这里输入图像说明

我敢肯定有更多优雅的解决scheme,但是如果你添加了一个辅助列,这将是非常简单的。

Concat值

然后,您可以针对两个版本的连接string使用Countif

COUNTIF

 =IF(COUNTIF(Sheet1!$D:$D,B$1&"|"&$A2)+COUNTIF(Sheet1!$D:$D,$A2&"|"&B$1)>0,"x","")