Excel 如果a:J行中没有数据,尝试删除该行
如果Excel 如果a:J行中没有数据,尝试删除该行,excel,vba,Excel,Vba,如果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 Erro
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
如果a:J行中没有数据,尝试删除该行
代码所做的是单独检查列,而不是标题所示的范围A:J
。您的整个数据很可能因此而被删除。假设A1
有一些数据,但B1
没有。因此,您的代码将删除行1
。您需要做的是检查sayA1: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
选项显式
子样本()
将ws设置为工作表
变暗rngBlanks作为范围
暗我一样长,浅我一样长,浅我一样长
“~~>将其设置为相关工作表
设置ws=ThisWorkbook.Sheets(“Sheet2”)
与ws
“~~>获取该表中的最后一行
如果Application.WorksheetFunction.CountA(.Cells)为0,则
lRow=.Cells.Find(内容:=“*”_
之后:=.范围(“A1”)_
看:=xlPart_
LookIn:=xl公式_
搜索顺序:=xlByRows_
搜索方向:=xlPrevious_
MatchCase:=False)。行
其他的
lRow=1
如果结束
“~~>在行中循环查找哪个范围为空
对于i=1至lRow
Ret=Application.Evaluate(“=COUNTA(A“&i&”:J“&i&”)
如果Ret=0,则
如果rngBlanks不算什么,那么
设置rngBlanks=.Rows(i)
其他的
设置rngBlanks=Union(rngBlanks、.Rows(i))
如果结束
如果结束
接下来我
以
“~~~>删除范围
如果不是rngBlanks,则rngBlanks.Delete
端接头
另一种方法是使用Autofilter删除那些范围我在代码中使用了一个表格,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
如果工作表function.CountBlank(范围(单元格(Rw,1),单元格(Rw,10))=0,则
Rw.EntireRow.Delete
我可以在这里发布整个代码,但我给出的应该会让您走上正确的轨道。您要删除哪一行?每次删除一行的代码需要向后迭代,否则会跳过行。此外,它应该是
rw.row
,否则会出现运行时错误。此外,空格的计数应为10。还有其他问题,但你明白了:)-1.