如何清除其中一列中有空单元格的行,而不删除整行?

时间:2012-07-25 14:48:52

标签: excel vba row shift

一个看似简单的问题:

我在列A:E中有数据。 E列在某些行中有一些空白单元格。

我想删除包含E中空白单元格的所有行。但是,这是捕获,后续列中还有其他数据。如果我删除整行,这些数据也将被删除,这是我不想要的。

更具体地说,我需要: (1)检查E列是否有空白单元格 (2)如果找到空白单元格,则清除具有此单元格的行,但仅清除列A:E (3)将列A:E中的数据移位

我试过了:

Range("E2:E100").SpecialCells(xlCellTypeBlanks).Delete Shift:=xlUp

但是这个只移动E列中的数据,而不是整行。

当然,我可以使用:

Range("E2:E100").SpecialCells(xlCellTypeBlanks).EntireRow.Delete

但就像我说的那样,这将删除后续列中的数据,这是我不想要的。

任何提示?

谢谢,

的Al

2 个答案:

答案 0 :(得分:2)

你不能移动整个并留下一些排,这是一个矛盾。听起来你想要这样做:

Range("A" & row & ":E" & row).Delete Shift:=xlUp

其中row是您要删除的行号

答案 1 :(得分:0)

要删除“块”中的A:E,但保留其他列完好无损的完整解决方案是

Sub PartKill2()
Dim rng1 As Range
Dim rng2 As Range
ActiveSheet.UsedRange
On Error Resume Next
Set rng1 = Columns("E").SpecialCells(xlBlanks)
On Error GoTo 0
If rng1 Is Nothing Then Exit Sub
For Each rng2 In rng1.Areas
rng2.Cells(1).Offset(0, -4).Resize(rng2.Rows.Count, 5).Delete xlUp
Next
End Sub

如果你想删除E为空白的整行,而F:End列是空白的(但是按原样保留该行),则可以使用这个更复杂的版本

Sub PartKill1()
Dim rng1 As Range
Dim lngCell As Long
Dim lngArea As Long
ActiveSheet.UsedRange
On Error Resume Next
Set rng1 = Columns("E").SpecialCells(xlBlanks)
On Error GoTo 0
If rng1 Is Nothing Then Exit Sub
For lngArea = rng1.Areas.Count To 1 Step -1
For lngCell = rng1.Areas(lngArea).Cells.Count To 1 Step -1
If Application.CountA(Range(rng1.Areas(lngArea).Cells(lngCell).Offset(0, 1), Cells(rng1.Areas(lngArea).Cells(lngCell).Row, Columns.Count))) = 0 Then
rng1.Areas(lngArea).Cells(lngCell).EntireRow.Delete
End If
Next
Next
End Sub