Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3355|回复: 15

[已解决]求助大神,初级菜鸟请问,VBA如何删除空行?

[复制链接]
发表于 2017-3-13 17:11 | 显示全部楼层 |阅读模式
Sub DeleteEmptyRows()
    Dim LastRow As Long
    Dim r As Long
    Dim Counter As Long
    Application.ScreenUpdating = False
    LastRow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1
    For r = LastRow To 1 Step -1
        If Application.WorksheetFunction.CountA(Rows(r)) = 0 Then
            Rows(r).Delete
            Counter = Counter + 1
        End If
    Next r
    Application.ScreenUpdating = True
    MsgBox Counter & " Empty rows were deleted."
End Sub



LastRow = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1这一句看不懂了呢,另外为什么会出现Row(1)?求助求助

最佳答案
2017-3-13 18:34
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1,因为前面有空白行吧(也就是说不是从第一行开始用的),ActiveSheet.UsedRange.Rows.Count得到已经区域的行数,ActiveSheet.UsedRange.Rows(1).Row得到已用区域第一行的行号,至于减1,就是个数学问题了
发表于 2017-3-13 17:18 | 显示全部楼层
回复

使用道具 举报

发表于 2017-3-13 18:01 | 显示全部楼层
你这代码这样写完全是。。。。。。感觉都没怎么用到VBA的思路,上传附件吧,重新来一套代码
回复

使用道具 举报

发表于 2017-3-13 18:29 | 显示全部楼层
为什么不用定位来删除呢?想要VBA也可以录制宏来改改
回复

使用道具 举报

发表于 2017-3-13 18:34 | 显示全部楼层    本楼为最佳答案   
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1,因为前面有空白行吧(也就是说不是从第一行开始用的),ActiveSheet.UsedRange.Rows.Count得到已经区域的行数,ActiveSheet.UsedRange.Rows(1).Row得到已用区域第一行的行号,至于减1,就是个数学问题了
回复

使用道具 举报

 楼主| 发表于 2017-3-14 09:01 | 显示全部楼层
Excel学徒123 发表于 2017-3-13 18:01
你这代码这样写完全是。。。。。。感觉都没怎么用到VBA的思路,上传附件吧,重新来一套代码

我现在正在学习VBA编程,这是书本上的示例,我没有看懂,谢谢啦~

delete empty rows.zip

79.73 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2017-3-14 09:19 | 显示全部楼层
望帝春心 发表于 2017-3-13 18:34
ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Rows(1).Row - 1,因为前面有空白行吧(也就是 ...

请问,就我这个图片而言,ActiveSheet.UsedRange.Rows.Count =7,ActiveSheet.UsedRange.Rows(1).Row =1是啊,所以,LastRow为7?可是实际的LastRow为9 呢,求助求助~谢谢啦
Capture1.PNG
回复

使用道具 举报

发表于 2017-3-14 09:22 | 显示全部楼层
Lydia_Li 发表于 2017-3-14 09:19
请问,就我这个图片而言,ActiveSheet.UsedRange.Rows.Count =7,ActiveSheet.UsedRange.Rows(1).Row =1 ...

那这样写就不对了,定位最后一行行号用CELLS(ROWS.COUNT,1).END(3).ROW,假如以第一列为准的话
回复

使用道具 举报

 楼主| 发表于 2017-3-14 10:37 | 显示全部楼层
望帝春心 发表于 2017-3-14 09:22
那这样写就不对了,定位最后一行行号用CELLS(ROWS.COUNT,1).END(3).ROW,假如以第一列为准的话

教材上是这么解释的:第一步是确定单元格区域中使用的最后一行,然后把这一行的编号赋值给LastRow变量。因为所使用的单元区域也许从第一行开始,也许不从第一行开始。因此,通过确定单元格区域所使用的行数,加上单元格区域中使用的第一行的编号,再减去1来计算LastRow的值。

老大,我已经蒙掉了~~~

delete empty rows.zip

79.73 KB, 下载次数: 3

回复

使用道具 举报

发表于 2017-3-14 10:46 | 显示全部楼层
本帖最后由 望帝春心 于 2017-3-14 10:49 编辑
Lydia_Li 发表于 2017-3-14 10:37
教材上是这么解释的:第一步是确定单元格区域中使用的最后一行,然后把这一行的编号赋值给LastRow变量。 ...
就例子代码这样写就可以了LastRow = ActiveSheet.UsedRange.Rows.Count,原来为什么这样写我5楼已经解释过了,你教材上“因为所使用的单元区域也许从第一行开始,也许不从第一行开始”也解释过了,如果还理解不了,那别人也不能帮你理解了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 04:01 , Processed in 0.202205 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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