Excel VBA 反复删除左上角含lns字符串的固定区域代码运行无反应求助
代码错误原因
InStr函数原生不支持*通配符匹配,你写的"*lns*"只会匹配单元格内容里本身包含星号加lns加星号的内容,自然找不到符合要求的单元格。- 正向遍历UsedRange删除单元格时,删除操作会触发后续单元格上移,会导致遍历过程跳过部分单元格,出现漏删的情况。
- 没有做边界校验,如果匹配到的单元格太靠近工作表边缘,删除超出工作表范围的区域会触发报错。
修正后代码
Sub DeleteLnsRegion() Dim lastRow As Long, lastCol As Long Dim i As Long, j As Long ' 获取当前工作表已使用区域的最大行、列 lastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row lastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column ' 倒序遍历行、列,避免删除导致的漏扫问题 For i = lastRow To 1 Step -1 For j = lastCol To 1 Step -1 ' 判断单元格包含lns,且剩余行、列足够容纳要删除的3行19列区域 If InStr(1, Cells(i, j).Value, "lns", vbTextCompare) > 0 _ And i + 2 <= lastRow And j + 18 <= lastCol Then Range(Cells(i, j), Cells(i + 2, j + 18)).Delete Shift:=xlShiftUp End If Next j Next i End Sub
补充说明
- 代码默认不区分
lns的大小写,如果需要严格匹配大小写,把vbTextCompare改为vbBinaryCompare即可。 - 如果需要删除区域后单元格左移,把
xlShiftUp改为xlShiftToLeft。
内容的提问来源于stack exchange,提问作者Makiko
相关产品推荐
相关产品推荐

