Excelvba运行太慢,怎么提速
我看出问题了,数据多的时候,隐藏的操作会很慢。加快速度有两个途径:
第一个简单点,fori=11tih的循环不要检查cells,而是先把第5列内容存放在数组里面,在数组里面检查是否应当隐藏。进行隐藏的算法也优化了一点,就是先根据是否相等判断出是否隐藏到变量x里面,然后检测那一行的状态是否与x相同,不同才处理,减少处理次数。优化后的代码如下:
OptionExplicitPrivateSubWorksheet_Change(ByValTargetAsRange)Dims,h,i,arr,xIfTarget.Address=Range(P5).AddressThens=Range(P5).Valueh=UsedRange.Rows.CountIf(Trim(s)=全部OrTrim(s)=)ThenRows(10:&h).Hidden=FalseElseApplication.ScreenUpdating=Falsearr=Range(Cells(1,5),Cells(h,5))Fori=11Tohx=arr(i,1)sIfRows(i).HiddenxThenRows(i).Hidden=xNextApplication.ScreenUpdating=TrueEndIfEndIfEndSub上面的代码通过从数组里面判断,减少了取数时间,隐藏/显示行之前先检测一下状态,减少处理时间,应该有一定的效果。
代码还可以进一步优化,逐行扫描去隐藏和显示的操作仍然非常耗时,进一步优化的思路就是一块一块的进行处理,例如在数万行中筛选出需要显示的只有几行(极端就是一行)而其它都要显示的时候,最最佳状态下只需要执行三次:前面一段隐藏、中间一段显示、后面一段隐藏,能把上万次的表格界面操作缩小到三次,效果会大大加强。但是代码会很长、很复杂,要用一系列变量记录判断的当前行应该隐藏还是显示,但不立即处理,继续判断下一行;如果需要的处理和前面的相同,就记录需要处理的范围,继续下一行判断;如果需要的处理和之前的不同,那就执行之前的操作,重新记录。
免责声明:本站发布的教育资讯(图片、视频和文字)以本站原创、转载和分享为主,文章观点不代表本网站立场。
如果本文侵犯了您的权益,请联系底部站长邮箱进行举报反馈,一经查实,我们将在第一时间处理,感谢您对本站的关注!
新励学网教育平台
海量全面 · 详细解读 · 快捷可靠
累积科普文章数:18,862,126篇