excel列中的多个条件匹配

时间:2013-11-12 20:38:59

标签: excel

我有两张纸。

Sheet 1中

A              
9/22/2013
9/23/2013
9/24/2013
9/25/2013

下面是我的资料2

Sheet 2中

W        X               Y                   Z
11     30.12    9/22/2013 10:54:00 PM      1.00  
13     32.43    9/22/2013 10:54:00 PM      2.00  
12     30.00    9/22/2013 10:54:00 PM      3.00  
11     33.11    9/23/2013 10:54:00 PM      4.00  
11     30.99    9/24/2013 10:54:00 PM      5.00  
12     30.67    9/24/2013 10:54:00 PM      6.00 

我需要公式来为sheet1生成具有以下条件的数据:

  • 如果W为“11”且X包含“30”且Y日期(非时间)等于“A”日期,则填写B,其值为“Z”

我需要在sheet1中输出如下所示。

A              B        c         d
9/22/2013     1.00       
9/23/2013     
9/24/2013     5.00
9/25/2013

寻求帮助来解决这个问题。

1 个答案:

答案 0 :(得分:1)

假设您的日期是实际的Excel序列日期/时间而其他数据是实际数字,则以下函数可以解决这个问题(为了清晰起见而添加间距):

=SUMPRODUCT(
            (Sheet2!$W$1:$W$6 = 11) * 
            (INT(Sheet2!$X$1:$X$6) = 30) * 
            (DATE(YEAR(Sheet2!$Y$1:$Y$6); MONTH(Sheet2!$Y$1:$Y$6); DAY(Sheet2!$Y$1:$Y$6)) = $A1) * 
            (Sheet2!$Z$1:$Z$6)
           )

这可以通过将许多“过滤器”应用于Z列中的数据来实现;我会一点一点地解释:

过滤器1:如果W列中的数字等于11,则返回一列TRUE / FALSE。

(Sheet2!$W$1:$W$6 = 11) -> returns
TRUE
FALSE
FALSE
TRUE
TRUE
FALSE

过滤器2:如果列X'中的数字包含'30,则返回一列TRUE / FALSE值。 取数字的整数部分,然后将它们进行比较以检查它们是否等于30。

(INT(Sheet2!$X$1:$X$6) = 30) -> returns
TRUE
TRUE
TRUE
TRUE
TRUE
TRUE

过滤器3:如果X列中的日期等于A1中的日期,则返回一列TRUE / FALSE值。 首先从Y列中提取日期(丢失时间),并比较结果以检查结果是否等于A1中的日期。

(DATE(YEAR(Sheet2!$Y$1:$Y$6); MONTH(Sheet2!$Y$1:$Y$6); DAY(Sheet2!$Y$1:$Y$6)) = $A1) -> returns
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE

这是实际数据;它只返回Z列中的值:

(Sheet2!$Z$1:$Z$6) -> returns
1
2
3
4
5
6

最后,SUMPRODUCT()将所有过滤器(请记住在Excel TRUE = 1和FALSE = 0中)与数据相乘...

TRUE  x TRUE x TRUE  x 1 = 1
FALSE x TRUE x TRUE  x 2 = 0
FALSE x TRUE x TRUE  x 3 = 0
TRUE  x TRUE x FALSE x 4 = 0
TRUE  x TRUE x FALSE x 5 = 0
FALSE x TRUE x FALSE x 6 = 0

然后对结果求和:1 + 0 + 0 + 0 + 0 + 0 = 1。

如果您不能快速了解SUMPRODUCT()的可能性,请在Daniel Ferry的excellent article中阅读。