匹配来自2个数据集的两个列值,然后查找关联的值

时间:2016-05-03 18:29:27

标签: excel

我遇到的问题很难被标题化,也难以搜索。

以下是一些示例数据。

A   B           C       D   E           F

B1  04/14/16    746     B1  04/25/16    2
B1  04/15/16    180     B1  04/30/16    4
B1  04/16/16    494     B1  05/01/16    5
B1  04/17/16    726     B2  04/01/16    1
B1  04/18/16    206     B2  04/03/16    1
B1  04/19/16    22      B2  04/04/16    2
B1  04/20/16    193     B2  04/05/16    2
B1  04/21/16    739     B2  04/12/16    8
B1  04/22/16    926     B2  04/13/16    1
B1  04/23/16    748     B2  04/14/16    2
B1  04/24/16    830     B2  04/15/16    1
B1  04/25/16    272     B2  04/18/16    9
B1  04/26/16    0       B2  04/19/16    1
B1  04/27/16    0       B2  04/26/16    9
B1  04/28/16    0       B2  04/27/16    3
B1  04/29/16    0       B2  04/30/16    1
B1  04/30/16    685     B2  05/02/16    5
B1  05/01/16    770     B2  05/03/16    2
B1  05/02/16    701     B3  04/03/16    3
B1  05/03/16    181     B3  04/04/16    1
B2  04/01/16    77      B3  04/06/16    2
B2  04/02/16    182     B3  04/07/16    1
B2  04/03/16    53      B3  04/09/16    1
B2  04/04/16    32      B3  04/16/16    7

我要做的是检查匹配的A和D列,以及匹配的B和E列。如果列匹配,我想取F列并除以C列。

如果A和B列值都不匹配,则返回零值。

所以对于一场比赛:

B1   04/25/16   =2/272

对于不匹配:

B1   04/14/16   0

谢谢。

1 个答案:

答案 0 :(得分:1)

两个INDEX / MATCH函数将执行此操作:

=IFERROR(INDEX($F$1:$F$24,MATCH(1,INDEX(($E$1:$E$24=J2)*($D$1:$D$24=I2),),0))/INDEX($C$1:$C$24,MATCH(1,INDEX(($B$1:$B$24=J2)*($A$1:$A$24=I2),),0)),0)

这是一个数组公式,应该避免使用全列引用,因为计算是指数级的并且会增加计算次数。

如果需要更动态的范围,请使用以下公式:

=IFERROR(INDEX($F$1:INDEX(F:F,MATCH(1E+99,F:F)),MATCH(1,INDEX(($E$1:INDEX(E:E,MATCH(1E+99,F:F))=J2)*($D$1:INDEX(D:D,MATCH(1E+99,F:F))=I2),),0))/INDEX($C$1:INDEX(C:C,MATCH(1E+99,C:C)),MATCH(1,INDEX(($B$1:INDEX(B:B,MATCH(1E+99,C:C))=J2)*($A$1:INDEX(A:A,MATCH(1E+99,C:C))=I2),),0)),0)

这将找到包含数据的最后一个单元格,并使用它来设置范围的范围。因此,现在随着数据的增长或缩小,它只会查看数据,而不会再覆盖或覆盖整个数据集所需的任何数据。

enter image description here