excel VBA 空行自动隐藏

工作表中间 行7到行107是一个数据表,其它上面和下面的行是文字,其中D列到K列,即D7;K107中的数据是按条件自动显示的,从上到下行数不确定,不会超过D107行,,想把107行上面的空白行按条件显示数据时自动隐藏,,VBA怎么写,
最好每句VBA有说明注解,谢谢了
图中第10行和第108行之间的D列到K列没有数据,是手动隐藏的,想实现自动隐藏

.

第1个回答  2014-09-16
Sub Macro1()
For i = 1 To 108
If Cells(i, 4) = "" And Cells(i, 11) = "" Then
Rows(i).EntireRow.Hidden = True
Else
Rows(i).EntireRow.Hidden = False
End If
Next
End Sub追问

把1改成8就好用了。
有没有办法改成一次性隐藏,不要一行行隐藏
刚才自己录了一个宏,就是选中行然后隐藏
Sub Macro2()
Rows("15:37").Select
Selection.EntireRow.Hidden = True
End Sub
看了下代码,能不能写个VBA,判断D列的空白行,得出Rows("15:37"),然后一次性隐藏?

我不懂VBA,说错了见谅。
谢谢

追答

Sub Macro1()
For i = 8 To 108
If Cells(i, 4) = "" And Cells(i, 11) = "" Then Exit For
Next
For u = 108 To 8 Step -1
If Cells(u, 4) = "" And Cells(u, 11) = "" Then Exit For
Next
Rows(i & ":" & u).EntireRow.Hidden = True
End Sub

追问

很好用,,谢谢,
不好意思,还想问下,,怎么设置这个宏自动执行,我现在搞了个按钮手动执行,不是太爽
呵呵

追答

我们一般的文件放在模块里,用手动执行。想自动执行就要放在第一个框的位置。那里有四个工作表。放那个工作表里,那个工作表里的文件就可以自动执行是。这样被称为工作表事件,你的工作表一被操作,你就要运算,所以你说你的机子慢,这个还是不要了。

追问

不好意思,公司机子是I5的,速度上应该没问题。
不过第二个答案出现了个问题,条件改变后数据行数比前一次多的话,执行后比前次多的数据行不会取消隐藏了,比如前次是1行,现在是两行了,执行后还是显示1行。
第一个答案没这个问题。
辛苦了,我会给你加分的谢谢

本回答被提问者和网友采纳