如果没有来自A:J
我找到了这段代码,并且一直在尝试编辑它,但这最终会删除整个工作表的数据。
非常感谢任何帮助
Sub DeleteRows()
Dim rngBlanks As Range
Dim i As Integer
For i = 1 To 10
On Error Resume Next
Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not rngBlanks Is Nothing Then
rngBlanks.EntireRow.Delete
End If
Next
End Sub
答案 0 :(得分:1)
如果A行中没有数据,则尝试删除行:J
正在执行的代码是单独检查列,而不是标题所示的范围A:J
。由于这个原因,您的整个数据很可能被删除。可以说A1
有一些数据但B1
没有。因此,您的代码将删除Row 1
。您要做的是检查说A1:J1
是否为空白。
我认为这是你在尝试的?
Option Explicit
Sub Sample()
Dim ws As Worksheet
Dim rngBlanks As Range
Dim i As Long, lRow As Long, Ret As Long
'~~> Set this to the relevant worksheet
Set ws = ThisWorkbook.Sheets("Sheet2")
With ws
'~~> Get the last row in that sheet
If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
lRow = .Cells.Find(What:="*", _
After:=.Range("A1"), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
Else
lRow = 1
End If
'~~> Loop through the rows to find which range is blank
For i = 1 To lRow
Ret = Application.Evaluate("=COUNTA(A" & i & ":J" & i & ")")
If Ret = 0 Then
If rngBlanks Is Nothing Then
Set rngBlanks = .Rows(i)
Else
Set rngBlanks = Union(rngBlanks, .Rows(i))
End If
End If
Next i
End With
'~~~> Delete the range
If Not rngBlanks Is Nothing Then rngBlanks.Delete
End Sub
另一种方法是使用Autofilter删除那些范围
答案 1 :(得分:-1)
我用一张表中的一些非空白单元格在A:J行到第15行中插入代码。行16:18完全空白,D19 = 1。您希望从A:J。
中删除每个单元格中具有空白的行在For..Next循环的第一次迭代中,rngBlanks并不是因为输入
?rngBlanks.address
退回$ A $ 1,$ A $ 5:$ A $ 19。 A2:A4不是空白。执行时
Set rngBlanks = Columns(i).SpecialCells(xlCellTypeBlanks)
它会查找A列中的任何空白,而这不是您想要测试的空白。您希望测试每一行,可能在您的ActiveSheet.UsedRange中,以查看列A:J是否全部为空。所以你需要定义一个变量
Dim Rw as Range
并迭代UsedRange中的每个Rw
For Each Rw in ActiveSheet.UsedRange
If WorksheetFunction.CountBlank(range(cells(Rw,1),cells(Rw,10))) =0 Then
Rw.EntireRow.Delete
我可以在这里发布完整的代码,但我给出的内容应该让你走上正轨。