Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel列中的多个条件匹配_Excel - Fatal编程技术网

excel列中的多个条件匹配

excel列中的多个条件匹配,excel,Excel,我有两张床单 表一 下面是我的床单 表2 我需要公式为具有以下条件的sheet1生成数据: 如果W为“11”,X包含“30”,Y日期(非时间)等于“A”日期,则用“Z”值填充B 我需要输出,如表1所示 A B c d 9/22/2013 1.00 9/23/2013 9/24/2013 5.00 9/25/2013 寻求帮助解决这个问题 假设您的日期是实际的Excel序列日期/时间,而其他数据是

我有两张床单

表一 下面是我的床单

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

  • 如果W为“11”,X包含“30”,Y日期(非时间)等于“A”日期,则用“Z”值填充B
我需要输出,如表1所示

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

寻求帮助解决这个问题

假设您的日期是实际的Excel序列日期/时间,而其他数据是实际的数字,则以下函数将实现此功能(添加间距以确保易读性):

其工作原理是对Z列中的数据应用多个“过滤器”;我会一点一点地解释:

过滤器1:如果列W中的数字等于11,则返回一列真/假值

(Sheet2!$W$1:$W$6 = 11) -> returns
TRUE
FALSE
FALSE
TRUE
TRUE
FALSE
筛选器2:如果列X'中的数字包含'30',则返回一列真/假值。 取数字的整数部分,然后比较它们是否等于30

(INT(Sheet2!$X$1:$X$6) = 30) -> returns
TRUE
TRUE
TRUE
TRUE
TRUE
TRUE
过滤器3:如果列X中的日期等于A1中的日期,则返回一列真/假值。 首先,从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提供的文章。

如果
iError
VLOOKUP
将使您朝着正确的方向前进。您好,谢谢您的建议。如果我的X列值是整数(不带小数),而Y列中的日期不带时间部分,它的效果就像魅力一样。谢谢你。有没有建议在sheet2的X列中使用十进制值,在Z列中使用DateAndTime值来实现这个结果?我刚刚(再次)测试了上述解决方案,它在X列中使用十进制,在DateTime中使用Y列。函数的
INT()
只返回十进制数的整数部分,因此,列X是保存十进制数还是整数应该无关紧要。此外,
DATE()
函数通过获取年、月和日信息,将Y列中的日期时间转换为没有任何时间信息的日期;因此,Y列是否保存日期或日期时间信息并不重要。谢谢你的荣誉;如果我的贡献是你问题的答案,请接受我的贡献?
(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
(Sheet2!$Z$1:$Z$6) -> returns
1
2
3
4
5
6
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