如何用VBA高效率地批量隐藏符合条件的EXCEL指定行

单位的排班表,包含一年365天的数据,每天占一行。现在写个程序来筛选指定月的数据才能显示,我在H1单元格中指定月份,然后自己写了一段代码,发现执行起来能到达目的,就是效率... 单位的排班表,包含一年365天的数据,每天占一行。现在写个程序来筛选指定月的数据才能显示,我在H1单元格中指定月份,然后自己写了一段代码,发现执行起来能到达目的,就是效率极低,请问有什么高效率的方法来实现?
我的代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
With Target
If .Address(0, 0) = "H1" Then
r1 = [a65536].End(xlUp).Row
Cells.EntireRow.Hidden = False '显示所有隐藏的行
Cells.EntireColumn.Hidden = False '显示所有隐藏的列
For i = 3 To r1
If Month(Cells(i, 1)) <> [H1] Then '如果单元格的日期的月份不等于H1中的数字,则隐藏该行
Rows(i).Hidden = 1
End If
Next
End If
End With
End Sub
展开
 我来答
阳光上的桥
2014-11-07 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65819
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
只是365行而已,不应该很满,下面这行修改一下试试看:
For i = 3 To r1

修改为:
For i = r1 To 3 Step -1
更多追问追答
追问
改了也很慢,关键是程序他执行的时候是一行一行的判断然后一行一行的隐藏的,隐藏速度大概是一秒钟能隐藏20行吧,365行得花上个十几秒了,然后是电脑也卡住……
追答

数据排序了没有?


如果排序的,可以循环找到第一条满足条件的数据,再找最后一条满足条件的数据,最后统一隐藏,参考代码:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, a, b, r1
With Target
  If .Address(0, 0) = "H1" Then
    r1 = [a65536].End(xlUp).Row
    Cells.EntireRow.Hidden = False  '显示所有隐藏的行
    Cells.EntireColumn.Hidden = False  '显示所有隐藏的列
    a = 3 '该月第一行
    b = r1 '该月最后一行
    For i = 3 To r1
      If Month(Cells(i, 1)) = [H1] Then '如果单元格的日期的月份不等于H1中的数字,则隐藏该行
        If a = 3 Then a = i
        b = i
      End If
    Next
    Range(3 & ":" & r1).Hidden = True '隐藏所有内容
    Range(a & ":" & b).Hidden = False '显示本月
End With
End Sub
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式