1

一个看似简单的问题:

我在 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

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

有小费吗?

谢谢,

4

2 回答 2

2

你不能改变整体并留下一些行,这是一个矛盾。听起来你想这样做:

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

其中 row 是您要删除的行号

于 2012-07-25T14:54:30.320 回答
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
于 2012-07-26T04:37:24.280 回答