excel匹配两个数组

时间:2019-05-29 12:47:42

标签: excel excel-formula match

我有一个看似很简单的问题,但仍然找不到合适的解决方案,我想避免使用vba。

我在一个电子表格中有两个表。两者具有相同的列-名称,城市,省。 我的目标是比较两者,如果连续三个值中有三个匹配,则拉“ 1”,否则,拉0。

我使用了以下公式,但不适用于我的情况。

=IF(AND(A2=P:P,G2=M:M,H2=L:L),1,0)

=INDEX(A:P,MATCH(A2,P:P,FALSE),MATCH(G2,M:M,FALSE),2)

=INDEX(L:P,MATCH(A5,P:P,0),MATCH(G5,M:M,0),MATCH(H5,L:L,0))

=SUMPRODUCT(--(L2:L60=H2),--(M2:M60=G2),--(P2:P60=A2),B2:B60)

解决方案似乎很简单,但我找不到它,

谢谢!

2 个答案:

答案 0 :(得分:1)

这里的关键是将列Match合并到一起。

=IFERROR( IF( MATCH(H3&"_"&I3&"_"&J3, $C$2:$C$60&"_"&$B$2:$B$60&"_"&$A$2:$A$60,0), "Yes"), "No")

选择一个不会在数据中出现的分隔符(我选择了_

答案 1 :(得分:0)

假设:只需要存在值,而不需要它们具有相等的行。

=If(IfError(Match(A2,P:P,0),0)*IfError(Match(G2,M:M,0),0)*IfError(Match(H2,L:L,0),0)>0,1,0)

对于每个IfError,如果匹配则将输出行号(> 0),否则,将输出零。将任何东西乘以零,您将得到零,在总体If语句中允许对true / false进行1或0输出。


如果它们需要在同一行中,则可以比较2个匹配项,这两个匹配项取决于传递属性(A = B,B = C,所以A = C):

=If(And(Match(A2,P:P,0)=Match(G2,M:M,0),Match(G2,M:M,0)=Match(H2,L:L,0)),1,0)

编辑1:

根据我对这个假阴性的评论(对此答案的评论),考虑到Match()返回具有匹配项的 first 行,VBA中的UDF或子例程会更合适。

由于这不是VBA标记的帖子,因此比预期的答案要高一些。我的建议是:

  • A)确保您习惯使用VBA。

  • B)发布有关创建用户定义函数的帖子(请注意,此处有关VBA的任何帖子都希望发布者可以与该主题的专家进行交互,并且会会花力气自己编写代码,因为StackOverflow并不是针对您的代码服务。

要帮助您确定UDF中可能存在的内容:

  • 循环遍历搜索列中第一行到最后一行的值(即L,M和P)

  • 用于动态标识搜索列最后一行的变量

  • if语句,用于比较循环循环中当前查找值(即A2,G2,H2)与搜索值之间的值

  • 输出1(已匹配)或0(不匹配)。

使用VBA可以通过多种方式进行此操作;希望这对您来说是个好的开始,伊琳娜!