夜雨聆风学习资料网

ARTICLE · 1258020

Excel-VBA自动化一键清理,复制出来一堆空行空列?智能化处理连带隐藏行列一起删掉

Excel-VBA自动化一键清理,复制出来一堆空行空列?智能化处理连带隐藏行列一起删掉
平时粘贴网页数据、导出系统报表、多表合并之后,最头疼的就是莫名其妙的空行、空列。
肉眼看着不多,往下翻几十上百条,手动一行一行删,费时还容易删错有效内容。
还有一种更坑的:别人文件里藏了大量隐藏行、隐藏列,透视、匹配的时候时不时出异常,找起来特别麻烦。
今天这段数组+范围判断的VBA,专门解决这个场景。
分两个可选功能:清理空白行列、清理隐藏行列,按需开启,不瞎删有内容的数据。
功能说明
✅ 删除完全空白行(整行没有任何内容才删,有一个单元格有内容就保留)
✅ 删除完全空白列(整列无内容删除)
✅ 可选一键删除工作表里所有隐藏行、隐藏列
✅ 代码做了判断保护,不会误删带数据的区域
✅ 关闭屏幕刷新,几千上万行执行起来不卡顿
✅ 保留表头,原有数据顺序不变
提醒:删除操作不可逆,运行前建议先保存文件,重要表格另存一份副本。
完整VBA代码
vba    
Sub 一键清理空行空列_删除隐藏行列()
    Dim ws As Worksheet
    Dim delBlankRow As Boolean
    Dim delBlankCol As Boolean
    Dim delHideRow As Boolean
    Dim delHideCol As Boolean
    '====================参数区,按需开关 True开启 False关闭====================
    delBlankRow = True      '删除空白行
    delBlankCol = True      '删除空白列
    delHideRow = False      '删除隐藏行,不需要改成False
    delHideCol = False      '删除隐藏列,不需要改成False
    '==========================================================================
    Set ws = ActiveSheet
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    '删除隐藏行,从下往上删,防止行号错乱
    If delHideRow Then
        Dim r As Long
        For r = ws.UsedRange.Rows.Count To 1 Step -1
            If ws.Rows(r).Hidden Then
                ws.Rows(r).Delete
            End If
        Next r
    End If
    '删除隐藏列,从右往左删
    If delHideCol Then
        Dim c As Long
        For c = ws.UsedRange.Columns.Count To 1 Step -1
            If ws.Columns(c).Hidden Then
                ws.Columns(c).Delete
            End If
        Next c
    End If
    '删除空白行,从下往上遍历
    If delBlankRow Then
        Dim lastR As Long
        lastR = ws.UsedRange.Rows.Count
        For r = lastR To 1 Step -1
            If WorksheetFunction.CountA(ws.Rows(r)) = 0 Then
                ws.Rows(r).Delete
            End If
        Next r
    End If
    '删除空白列,从右往左遍历
    If delBlankCol Then
        Dim lastC As Long
        lastC = ws.UsedRange.Columns.Count
        For c = lastC To 1 Step -1
            If WorksheetFunction.CountA(ws.Columns(c)) = 0 Then
                ws.Columns(c).Delete
            End If
        Next c
    End If
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    MsgBox "清理执行完成!", vbInformation
End Sub
参数怎么改,简单说清楚
只改上面参数区4行,其余代码不用动
- 只删空行空列: delHideRow=False 、 delHideCol=False 
- 连带隐藏行列一起清理:全部改成 True 
- 只想清隐藏行,保留空白行列: delBlankRow=False 、 delBlankCol=False 
重点:删除行列必须倒序循环(从底部、右侧往回删),正序删除会造成行号偏移、漏删,网上很多简单代码就是踩这个坑。
适用场景
1. 网页复制、文本粘贴后,夹杂大量隔行空白
2. 多文件合并之后,中间多出成片空行
3. 收到别人发来的表格,里面藏了隐藏辅助行列,影响后续统计
4. 台账整理前预处理,精简表格,减少冗余区域
温馨小提示
很多人清理完空行之后,紧接着就要做数据清洗了。这样依然还会有一些错误
搭配上一篇【一键数据清洗】一起用,一套流程下来:清理冗余行列 → 清洗字符空格日期 → 多条件去重,原始脏表直接整理成标准台账。
专业vba开发收藏分享不迷路
Excel-VBA数据太脏不用手改!一键全自动清洗:去空格、清乱码、统一日期、多条件去重
VBA数组版|跨文件多条件模糊查询回填(支持通配,十万行不卡)
VBA递归遍历读取多层文件夹,一键合并所有Excel(普通vba做不到)
VBA一键按条件自动提取数据(文员、生产统计专用)
别再只用RANK!Excel多条件排名,业绩产量排序直接套用

相关学习资料