2016-12-05 104 views
-1

我期待删除空白行,但留下两个空白行。这是我到目前为止的代码:删除所有空白行,但留下两个空行

Sheets("XYZ").Select 
Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
Do Until blanks.Columns.Count = 2 
Loop 
End Sub 
+1

你为什么不直接删除所有的空行,但随后在末尾插入2? – PartyHatPanda

回答

1

我觉得有可能是更好的方式来做到这一点,但在针对您的问题试试这个。

改变我因此,3 = 2blanks离开

Dim blankRows As Integer 
Dim i As Integer 
With Sheets("Sheet1").UsedRange 
    blankRows = .Columns(1).SpecialCells(xlCellTypeBlanks).Count 

    For i = 3 To blankRows 
     Columns(1).Cells.SpecialCells(xlCellTypeBlanks)(1).EntireRow.Delete 
    Next i 
End With 
+0

你测试了你的解决方案吗? 'SpecialCells(xlCellTypeBlanks)(n)'应该从firts空白返回第n个连续的单元格。哪个不是OP想要的 – user3598756

+0

你的意思是第一个空白会保持不变? –

+0

对不起,我没有注意到'SpecialCells(xlCellTypeBlanks)(1)'中有一个不变的'1'索引,而不是变量'i'。所以它实际上总是捕获第一个_left_空白单元格。只有一个问题:使用'.Columns(1).SpecialCells(xlCellTypeBlanks)'返回使用范围的第一列中的所有空白单元格(其可能从不同于列“A”的列开始)到最后一行使用范围本身。这可能不是OP想要的。使用'.Range(“A1”,.Cells(.Rows.Count,1).End(xlUp))'替换'.Columns(1)'将会捕获仅“第一个”使用列的空白单元 – user3598756

1

你可以试试这个:

Sub main() 
    Dim lastCell As Range 
    Dim blanksCount As Long 
    Dim iarea As Long, icell As Long 

    With Worksheets("XYZ") 
     With .Range("A1", .Cells(.Rows.Count, 1).End(xlUp)).SpecialCells(xlCellTypeBlanks) 
      For iarea = .Areas.Count To 1 Step -1 
       For icell = .Areas(iarea).Count To 1 Step -1 
        blanksCount = blanksCount + 1 
        If blanksCount = 2 Then 
         Set lastCell = .Areas(iarea).Cells(icell).Offset(-1) 
         Exit For 
        End If 
       Next 
       If Not lastCell Is Nothing Then Exit For 
      Next 
     End With 
     .Range("A1", lastCell).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 
    End With 
End Sub