Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 11569|回复: 10

VBA多条件筛选,数据合并

[复制链接]
发表于 2020-7-30 18:46 | 显示全部楼层 |阅读模式
3学分
想将原始数据文件中数据按照标准要求的内容条件筛选,数据合并新生成 结果文件样式 文件中的D E两列的格式
http://www.excelpx.com/forum.php?mod=attachment&aid=NDQxNTc1fGZlZDUwYzgyNGE4NzQ5OTU4NzQzY2Y1NWIyZDkxMWFhfDE3MTUyMDcyMDY%3D&request=yes&_f=.png
http://www.excelpx.com/forum.php?mod=attachment&aid=NDQxNTc2fGQ5ODczYTg0YTA0ZDg5ZmFmYzc3ZDVkMDk4NDI4YjNlfDE3MTUyMDcyMDY%3D&request=yes&_f=.png
http://www.excelpx.com/forum.php?mod=attachment&aid=NDQxNTc0fGY3OTA4ZWI4MThhZDZjYWE4NTk2N2M2OTAxMzVmMTllfDE3MTUyMDcyMDY%3D&request=yes&_f=.png

QQ截图20200730184323.png
QQ截图20200730184342.png
QQ截图20200730184351.png

原始数据.rar

10.97 KB, 下载次数: 5

结果文件样式.rar

8.42 KB, 下载次数: 7

 楼主| 发表于 2020-7-31 08:44 | 显示全部楼层
QQ截图20200731082104.png

条件a1:样品名称中包含“蛋”字


条件a2:检测要求说明中包含“21312”
条件a3:检测要求说明中包含“20366”

条件b1:检测项目中包含“恩诺”
条件b2:检测项目中包含“氧氟”
条件b3:检测项目中包含“诺氟”
条件b4:检测项目中包含“培氟”
条件b5:检测项目中包含“沙拉”

要求如下:
满足条件a1、a2,b1时,报出值单元格填充  恩诺沙星…………………  □        □未检出(定量限:2μg/kg)
满足条件a1、a2,b2时,报出值单元格填充  氧氟沙星…………………  □        □未检出(定量限:2μg/kg)




回复

使用道具 举报

 楼主| 发表于 2020-7-31 12:02 | 显示全部楼层
=IF(AND(ISNUMBER(FIND("氧氟沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:2μg/kg)","□           □未检出(定量限:3.0μg/kg)"),"error1")

=IF(AND(ISNUMBER(FIND("诺氟沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:3μg/kg)","□           □未检出(定量限:6μg/kg)"),"error1")

=IF(AND(ISNUMBER(FIND("培氟沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:3μg/kg)","□           □未检出(定量限:6μg/kg)"),"error1")


if函数可以循环嵌套多少层?我试了一下,四层就不行了

=IF(AND(ISNUMBER(FIND("沙拉沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:3μg/kg)","□           □未检出(定量限:6μg/kg)"),"error1")

=IF(AND(ISNUMBER(FIND("氧氟沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:2μg/kg)","□           □未检出(定量限:3.0μg/kg)"),"IF(AND(ISNUMBER(FIND("诺氟沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:3μg/kg)","□           □未检出(定量限:6μg/kg)"),"IF(AND(ISNUMBER(FIND("培氟沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:3μg/kg)","□           □未检出(定量限:6μg/kg)"),"IF(AND(ISNUMBER(FIND("沙拉沙星",C4)),ISNUMBER(FIND("21312",I4))),IF(ISNUMBER(FIND("蛋",B4)),"□           □未检出(定量限:3μg/kg)","□           □未检出(定量限:6μg/kg)"),"error1")")")")
回复

使用道具 举报

发表于 2020-7-31 12:56 | 显示全部楼层
我试了下,“以恩诺沙星和环丙沙星之和计” 搞不定,其他的都还行。这种文字描述的无法计算;

评分

参与人数 1学分 +3 收起 理由
t2019er + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-7-31 18:07 | 显示全部楼层
hfwufanhf2006 发表于 2020-7-31 12:56
我试了下,“以恩诺沙星和环丙沙星之和计” 搞不定,其他的都还行。这种文字描述的无法计算;



是vba还是单元格的if函数
回复

使用道具 举报

发表于 2020-7-31 23:34 | 显示全部楼层
t2019er 发表于 2020-7-31 18:07
是vba还是单元格的if函数

就是你输出表的第一条记录的报出值 4,你标准中的值全部都是2,所以我觉得那个4是按照 “恩诺沙星和环丙沙星之和” 计算出来的,这种按照文字描述来计算是搞不了的;

我用的是vba,没有函数;
回复

使用道具 举报

 楼主| 发表于 2020-8-1 20:56 | 显示全部楼层
hfwufanhf2006 发表于 2020-7-31 23:34
就是你输出表的第一条记录的报出值 4,你标准中的值全部都是2,所以我觉得那个4是按照 “恩诺沙星和环丙 ...

把原始数据 恩诺沙星(恩诺沙星和环丙沙星之和)拆分成两行,一行恩诺沙星,一行环丙沙星,处理完后我自己手算加和
回复

使用道具 举报

发表于 2020-8-2 09:06 | 显示全部楼层
t2019er 发表于 2020-8-1 20:56
把原始数据 恩诺沙星(恩诺沙星和环丙沙星之和)拆分成两行,一行恩诺沙星,一行环丙沙星,处理完后我自 ...

不能我帮你拆,需要你自己把原始数据中的文字描述规范化,比如,可以把:恩诺沙星(以恩诺沙星和环丙沙星之和计)
改成:
恩诺沙星、环丙沙星
或者:
恩诺沙星+环丙沙星
或者恩诺沙星,环丙沙星
....
只能用其中一种结构,不能混用。上面的结构中,、+,都算分隔符。总的一条就是除了分隔符,其他全部都是关键字,非关键字一个也不能有,因为代码并不能识别“恩诺沙星”和“环丙沙星”是关键字,如果只有一个分隔符,关键字就很好识别了。

不建议用手加的方式,既然是代码,尽量做到全自动化,所以只要有很规范的数据,代码是很容易做出来的,不规范的数据就没法搞;








回复

使用道具 举报

 楼主| 发表于 2020-8-2 16:36 | 显示全部楼层
OK,我把原始数据改好了,恩诺沙星(以恩诺沙星和环丙沙星之和计)替换成恩诺沙星+环丙沙星。
多谢hfwufanhf2006
回复

使用道具 举报

 楼主| 发表于 2020-8-3 12:02 | 显示全部楼层
我重新上传的附件,页面上看不见,是什么原因
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-9 06:26 , Processed in 0.200706 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表