如何用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 展开
我的代码如下:
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 展开
1个回答
展开全部
只是365行而已,不应该很满,下面这行修改一下试试看:
For i = 3 To r1
修改为:
For i = r1 To 3 Step -1
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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询