如何修改VBA代码:找到空白单元格则删整行,无空白则跳过?
解决VBA查找空白单元格删行时无空白报错的问题
方法一:用错误捕获简化原逻辑
原代码报错的核心是SpecialCells(xlCellTypeBlanks)找不到空白单元格时会触发错误,只需添加错误捕获就能跳过这个场景,直接执行后续代码:
Dim Lastrow As Long Lastrow = Cells(Rows.Count, 1).End(xlUp).Row On Error Resume Next ' 开启错误捕获,找不到空白时跳过错误 Range("K3:K" & Lastrow).SpecialCells(xlCellTypeBlanks).EntireRow.Delete Shift:=xlUp On Error GoTo 0 ' 恢复默认错误处理,不影响后续代码
- 去掉了冗余的
Select操作,直接对目标范围执行删除,效率更高; On Error Resume Next会忽略“找不到空白单元格”的错误,无空白时直接跳过删除步骤;On Error GoTo 0恢复正常错误检测,避免后续代码的错误被忽略。
方法二:修复循环删除的代码(解决内存错误)
你之前尝试的循环代码出现内存错误,是因为用了关键字Rows当变量名,且判断逻辑不对(你判断的是整行是否为空,而非K列单元格)。修复后的代码如下:
Dim Lastrow As Long Dim rng As Range Dim i As Long Lastrow = Cells(Rows.Count, 1).End(xlUp).Row Set rng = ActiveSheet.Range("K3:K" & Lastrow) ' 从下往上循环,避免删除行后索引错乱 For i = rng.Rows.Count To 1 Step -1 ' 检测K列当前单元格是否为空白 If IsEmpty(rng.Cells(i)) Or rng.Cells(i).Value = "" Then rng.Cells(i).EntireRow.Delete End If Next i
- 替换了错误的变量名,改用
rng.Rows.Count获取目标范围的行数; - 直接判断K列单元格是否为空,符合你的需求;
- 从最后一行往上循环,防止删除行后前面的行索引错位,避免漏删或误删。
内容的提问来源于stack exchange,提问作者Marla
相关产品推荐
相关产品推荐

