|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
你代码还需要加强学习:
1、宏按钮不需要用activaX,内部按钮就很好用;
2、你注释做的很好,看得出来你很有条理,但你的代码却没有条理,只是简单的罗列;
3、尽量用数组来取代单元格读取,一般小数量关系不大,大数据量影响就很大,分界线在5000行数据左右;
4、简单说说思路,我其实也写了完整的代码,但后来发现你的文件不能另存,导致代码丢失,我也不想再写了,只说下思路:
1)先把参数存放在参数表中,参数表可以是数组,也可以是字典或者其他,避免后续的反复读取单元格;
比如指标C,可以这么定义:
dim arr(1 to 3)
if cells(2,3)<>0 or cells(2,4)<>0 then '任何一个参数不为零,即为有定义,这里的规则可以按你的需求改
arr(1,1)=true '有定义的标志
arr(1,2)=cells(2,3) '定义的下限值
arr(1,3)=cells(2,4) '定义的上限值
else
arr(1,1)=false '无参数定义
endif
其他参数类似
2)后续参数的连续判断,有一个相对有条理的方法:
bz=true '先设定一个判断标识,初始化为符合所有条件
if arr(1,1) then '如果指标C有定义,无定义就不改变标识
if brr(i,67)<arr(1,2) or brr(i,67)>arr(1,3) then 'brr是原始数据的数组,先要把所有数组读入到数组brr。
bz=false '如果当前行的指标C不在定义范围内,改变筛选标识
endif
endif
其他条件用类似的方法在后面罗列,任何条件不满足都要改变bz的值
3)复制满足全部条件的筛选结果
if bz then '如果所有条件都满足
rows(i).copy worksheets(3).cells(worksheets(3).[a65000].end(3).row,1) '带格式复制,不需要格式的话,就加一个无格式的参数
endif
基本结构就是这样吧,但上述还有很多参数是需要注意的,比如rows(i).copy中的i其实是不对的,因为数据先存储到数组brr,数组从1开始,而实际要复制的行参数 i 是从3开始,所以正确的应该是rows(i-2).copy
|
评分
-
2
查看全部评分
-
|