-1

我有两张床单。

表 1

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

下面是我的sheet2

表 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”日期,则用“Z”的值填充 B

我需要 sheet1 中的如下输出。

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

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

4

1 回答 1

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 的优秀文章

于 2013-11-13T11:55:38.440 回答