ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1225|回复: 2

[讨论] VBA执行效率提升求大神改进

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-10-5 13:55 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

刚入门vba代码,卡在数组这关过不去了,我写的代码运行效率太低了。求大神帮我改进一下,谢谢
下面的第2段和第4段是一样的结果,第4段我试着把单元格F4:F300(使用了l变量)装进rng,但是运行效率和第二段差不多是一样的

这两段代码的意思是F列单元格的值为0或为“”空 时,就隐藏当前行。 因为我的单元格都套用有函数,
如果不隐藏打印的时候会打印好多空白页

我还在计划 循环sheet2--sheet6,在其中一个工作表中点击按钮实现5个工作表同时隐藏或还原显示

QQ浏览器截图20211005131512.png
1.
Private Sub ToggleButton1_Click()
If ToggleButton1.Caption = "隐藏" Then
ToggleButton1.Caption = "显示"
Call yinchang
Else
ToggleButton1.Caption = "隐藏"
Call xianshi
End If
End Sub


2.
Sub yinchang()
Dim i
t = Time
For i = 4 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 6).Value = 0 Or Cells(i, 6).Value = "" Then
Rows(i).EntireRow.Hidden = True
End If
Next
Cells(4, 5).Select
t1 = Time - t
MsgBox t1
End Sub



3.
Sub xianshi()
Rows("4:242").Select
    Range("A242").Activate
    Selection.EntireRow.Hidden = False
Cells(4, 1).Select
End Sub

4.
Sub ssss()
Dim l, i
t = Time
l = Cells(Rows.Count, 1).End(xlUp).Row
rng = Range("f4:f" & l)
For i = 1 To l - 4
If rng(i, 1) = "" Then
Rows(i + 3).EntireRow.Hidden = True
End If
Next
t1 = Time - t
MsgBox t1
End Sub


文件下载后把zip改成xlsm,我没有用压缩文件打包的vba密码511323
666隐藏空行模板21-10-05.zip (351.61 KB, 下载次数: 7)

TA的精华主题

TA的得分主题

发表于 2021-10-6 09:37 | 显示全部楼层
Sub ssss()
Dim l, i
Application.ScreenUpdating = False
t = Time
Set Rng = Nothing
l = Cells(Rows.Count, 1).End(xlUp).Row
arr = Range("f1:f" & l)
For i = 4 To l
If arr(i, 1) = "" Then
    If Rng Is Nothing Then
        Set Rng = Cells(i, 1)
    Else
        Set Rng = Union(Rng, Cells(i, 1))
    End If
End If
Next
If Not Rng Is Nothing Then Rng.EntireRow.Hidden = True
Application.ScreenUpdating = True
t1 = Time - t
MsgBox t1
End Sub

供参考。。。。。。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-7 20:20 | 显示全部楼层
liulang0808 发表于 2021-10-6 09:37
Sub ssss()
Dim l, i
Application.ScreenUpdating = False

想破脑袋也没想到可以用Union(Arg1, Arg2, ...)方法,

精髓就在这句

If Rng Is Nothing Then
        Set Rng = Cells(i, 1)
    Else
        Set Rng = Union(Rng, Cells(i, 1))
    End If
多谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-11 15:04 , Processed in 0.034528 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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