2016-12-05 21 views

答えて

1

を私はこれを行うには良い方法があるかもしれないと思うが、あなたの質問に応じて、これを試してみてください。

の変化は、私はそれに応じて、3 =の2blanksなぜあなただ​​けのすべての空白行を削除したが、その後最後に2を挿入していない

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

申し訳ありませんが、変数 'i'ではなく、' SpecialCells(xlCellTypeBlanks)(1) 'に一定の' 1'インデックスがあります。したがって、実際には常に最初の_left_空白セルがキャッチされます。 '.Columns(1).SpecialCells(xlCellTypeBlanks) 'を使用すると、使用された範囲の最初の列のすべての空白セルが返されます(BTWは、列" A "とは異なる列から始まることがあります)。使用範囲自体のOPが望むものではないかもしれない。 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 
関連する問題