我当前正在使用此代码来查找L列中的空单元格,如果该单元格为空以用于代码删除K和S之间的该行中的所有数据。它可以正常工作,直到获得连续的空白行;当代码删除第一行时,代码将移至下一个i,但由于移位,它会跳过空白行。 (不好意思的歉意)
Sub deleteempty2()
With Sheets("baml")
last2 = .Range("L" & Rows.Count).End(xlUp).Row
For i = 5 To last2
If .Cells(i, 12) = "" Then
.Range("k" & i & ":s" & i).delete Shift:=xlUp
last1 = last1 - 1
Else: End If
Next i
End With
End Sub
我尝试包括 do直到L5 <>“” ,然后加上一个循环,但这似乎进入了永久循环。
欢迎提出任何建议:)
答案 0 :(得分:3)
删除时最好从最后一行到第一行进行操作,正如您提到的那样,行/单元格从上到下向上移动,您不会错过任何内容,如下所示:
Sub deleteempty2()
With Sheets("baml")
last2 = .Range("L" & Rows.Count).End(xlUp).Row
For i = last2 To 5 Step -1
If .Cells(i, "L") = "" Then
.Range("K" & i & ":S" & i).Delete Shift:=xlUp
End If
Next i
End With
End Sub
答案 1 :(得分:0)
一种更有效的方法(从我的角度来看),而没有 For 循环:
Dim ws As Worksheet
Dim rg As Range
Set ws = ThisWorkbook.Worksheets("baml")
Set rg = ws.Range("A1:C405") 'whatever the range you want
rg.Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
我一直都这样做,而且效果很好!