Excel VBA-删除空行,直到有数据为止
我有一个数据,看起来像这样,空行的数量可能会增加或减少,并且不是固定的 我想做的是把它变成这个,删除空行,直到有数据并使其停止。我不希望它删除可能位于数据中间的其他空行。 我一直在测试一些东西,这就是我所拥有的,但是这段代码并没有清除所有的空行,只有少数空行。我意识到问题可能是以rng的方式为每个单元格使用Excel VBA-删除空行,直到有数据为止,excel,vba,Excel,Vba,我有一个数据,看起来像这样,空行的数量可能会增加或减少,并且不是固定的 我想做的是把它变成这个,删除空行,直到有数据并使其停止。我不希望它删除可能位于数据中间的其他空行。 我一直在测试一些东西,这就是我所拥有的,但是这段代码并没有清除所有的空行,只有少数空行。我意识到问题可能是以rng的方式为每个单元格使用,因为当我使用cell.entirerow.delete时,它将继续到下一个单元格,但我可能错了 Sub Test() Dim cell as range, rng as rang
,因为当我使用cell.entirerow.delete
时,它将继续到下一个单元格,但我可能错了
Sub Test()
Dim cell as range, rng as range
Dim lRow as long
Set rng = Range("C3:C" & lRow)
For Each cell In rng
If IsEmpty(cell.Offset(-1)) Then
cell.Offset(-1).EntireRow.Delete
Else
Exit For
End If
Next cell
End Sub
感谢您的帮助跟随我的评论,重新减少您的for
循环。如果您执行以下操作,它应该会起作用:
选项显式
子测试()
暗我一样长,浅我一样长
将ws设置为工作表
设置ws=ThisWorkbook.Sheets(“Sheet1”)
lRow=ws.Range(“C”&ws.Rows.Count).End(xlUp).Row
对于i=L,请转至1步骤-1
如果ws.Cells(i,3).Value=”“和ws.Cells(i-1,3).Value=”“,则
ws.Cells(i,3).EntireRow.Delete
如果结束
接下来我
端接头
从底部开始,向上移动
Sub Button1_Click()
Dim LstRw As Long, x
LstRw = Cells(Rows.Count, "C").End(xlUp).Row
For x = LstRw To 1 Step -1
If IsEmpty(Cells(x, 2)) Then Cells(x, 2).EntireRow.Delete
Next
End Sub
在大多数情况下,下面这个简单的代码都可以工作
如果找不到空白,则需要错误陷阱
Sub delrws()
On Error Resume Next
Columns("B:B").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
你遇到了一个经典问题。挑战是,;如果删除第26行,以前为27的行将为26。因此,下一个循环将跳过它,并且(可能)留下空白行
解决这个问题的一种方法是做一个反向循环。我的解决办法是:
Sub Test()
Dim lRow As Integer
For i = 2 To 100
If IsEmpty(Cells(i, 1)) Then
lRow = i
Else
Exit For
End If
Next i
For i = lRow To 2 Step -1
If IsEmpty(Cells(i, 1)) Then
Cells(i, 1).EntireRow.Delete
End If
Next i
End Sub
这解决了问题,因为如果删除第26行,前一行27将变为第26行。但是这个改变并不重要,因为循环现在从下到上,这意味着下一个循环检查第25行 根据您的评论,您有兴趣将空行保持在较低的位置。只有头和第一个数据之间的数据才需要删除。因此,您实际上对包含数据的第一个单元格感兴趣。此外,您可以一次删除一系列行,而不是逐个删除
请尝试以下操作:
这就完成了样本数据的工作。删除行时,应减少循环的。这将确保删除所有行。对每个
使用,将确保增加,因此不会删除所有。您计划如何区分要保留的空行和要删除的空行?您只想删除标题和第一行数据之间的空行吗?您好,JvdV,是的,我只想删除标题和第一行数据之间的行。您好,通过运行代码,只剩下每个数据块的第一行,实际上我只想删除标题和第一行数据之间的行。剩下的空行应该保留在那里。我已经编辑了前面的代码以匹配您的描述。解决方案是计算第1行下面有多少空行,然后删除。嗨,通过运行代码,每个数据块只剩下第一行,实际上我想要的只是删除标题和第一行数据之间的行。剩下的空行应该保留在那里。您好,这是可行的,起初我认为有错误,但这只是因为工作表引用。非常感谢。很高兴它对你有用。工作表参考由CodeName
提供。否则,您可能需要使用工作表(“Sheet1”).Range(“A:A”)
@Vbanoob
Sub Test()
Dim fr As Long
With Sheet1.Range("A:A")
fr = .Find(what:="*", after:=.Cells(1, 1), LookIn:=xlValues).Row
If fr > 2 Then
.Rows("2:" & fr - 1).Delete
End If
End With
End Sub