不得不说,你这个问题有点难,其实也不是难,是恶心。对于一般的没有VBA基础的人,处理这个问题就是通过一步步繁复的操作来实现。 如果说通过筛选去找,数据量大的话,这个事无疑会恶心死人。 我看这个问题在这有一段时间了,但是也没人给出靠谱的回答,所以特地写了一段代码。经测试,完全没有问题。 而且,这个问题提的也很模糊,不太方便给出针对性的做法 对于写VBA代码来说没有说清楚的地方有以下几处:
以上情况都是编写VBA代码需要考虑的地方 我这里呢,根据给出的模糊问题,简单的写了一个大概能用的宏命令 先说一下我的思路:
下图是我做的实例,有三个Sheet表,每个表格中存在标注了颜色的行,或单元格: Sheet1,标题行标注颜色,数据中整行包含不同颜色 Sheet2,标题行标注颜色,数据中非整行包含不同颜色 Sheet3,标题行未标注颜色,数据中非整行包含不同颜色 VBA编辑器打开方法,快捷键:Alt+F11,工程区,插入,模块 VBA代码图示(源码占用篇幅较大,我放到最后了): 其中 Sub Clear():用于清除未标注颜色的非空单元格 Sub DeleteEmptyRows():用于删除空行 Sub DeleteEmptyColumns():用于删除空列 代码执行过程中,只执行一个工程,但通过Sub Clear()工程,调用了Sub DeleteEmptyRows()和Sub DeleteEmptyColumns() 我们来看一下执行代码的效果: 代码执行时,为了看效果,我屏蔽了两条返回sheet1的代码 从动图可以看到,代码执行的很快,也达到了我们的目
我再一步一步执行代码,给大家看一下Excel都干了些什么(由于多个sheet处理机制一样,这里只录制了两个sheet的处理过程慢放): 通过慢放,大家应该能看出,代码真的是很蠢的,它也是一个一个的单元格去删除,然后再去删除行。 需要注意的是,如果表格中存在空的sheet,vba会给出一个提示,如果空表夹杂在有数据的表格中间,那么代码运行到空表的时候会退出,直接给出提示,不再向下运行。 提示如下: sheet4为一个空的表格 对于宏,你也可以再Excel中插入一个控件,指定到所编写的宏,之后,点击控件即可执行宏了。操作方法如下: ok,就这么多吧,代码我写在下边了,没有写注释,如果有感兴趣的朋友可以自己去研究优化一下,或者有什么疑问,评论或私信联系我即可: 横线中间为VBA代码: -------------------------------------- Sub Clear() Dim rng As Range, i As Integer For i = 1 To ActiveWorkbook.Worksheets.Count ActiveWorkbook.Worksheets(i).Select For Each rng In ActiveSheet.UsedRange.SpecialCells(2) On Error GoTo Skip If rng.Interior.ColorIndex = xlNone Then rng.Clear End If Next Call DeleteEmptyRows Call DeleteEmptyColumns Next ActiveWorkbook.Worksheets(1).Select Exit Sub Skip: ActiveWorkbook.Worksheets(1).Select MsgBox '已经没有未标记颜色的非空单元格' End Sub Sub DeleteEmptyRows() Dim LastRow As Integer, r As Integer LastRow = ActiveSheet.UsedRange.Rows.Count LastRow = LastRow + ActiveSheet.UsedRange.Row - 1 For r = LastRow To 1 Step -1 If WorksheetFunction.CountA(Rows(r)) = 0 Then Rows(r).Delete End If Next r End Sub Sub DeleteEmptyColumns() Dim LastColumn As Integer, c As Integer LastColumn = ActiveSheet.UsedRange.Columns.Count LastColumn = LastColumn + ActiveSheet.UsedRange.Column For c = LastColumn To 1 Step -1 If WorksheetFunction.CountA(Columns(c)) = 0 Then Columns(c).Delete End If Next c End Sub -------------------------------------- |
|