Удалить строки на основе пустых ячеек в диапазоне - PullRequest
0 голосов
/ 26 августа 2011

Я пытаюсь удалить пустые строки в диапазоне

Мой код выглядит так:

Dim rng As Range
Dim i As Long, counter As Long

i = 1

Range("B1").Select
Selection.End(xlDown).Offset(0, 5).Select

Set rng = Range("G2", ActiveCell)

Range("G2").Select

For counter = 1 To rng.Rows.Count

    If rng.Cells(i) = "" Then
       rng.Cells(i).EntireRow.Delete
    Else
        i = i + 1
    End If

Next

Итак, hmqcnoesy любезно помог мне решить сообщение об ошибке. Переменные должны быть Dimmed как LONG, а не INTEGER, потому что целое число не может содержать большое число для всех моих строк данных

Кроме того, Jon49 дал мне код, который был намного эффективнее для этого процесса:

Dim r1 As Range  'Using Tim's range.     
Set r1 = ActiveSheet.Range(Range("G2"),Range("B1").End(xlDown).Offset(0, 5))   
    'Delete blank cell rows. 
r1.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Set r1 = Nothing 

Ответы [ 3 ]

4 голосов
/ 26 августа 2011

Похоже, вы должны попробовать использовать тип Long для i и counter. Использование Integer вызывает переполнение, по крайней мере, в новых версиях Excel, где на листе более 1 миллиона строк.

3 голосов
/ 26 августа 2011

Вот несколько простых кодов для вас:

Dim r1 As Range

'Using Tim's range.    
Set r1 = ActiveSheet.Range(Range("G2"),Range("B1").End(xlDown).Offset(0, 5)) 

'Delete blank cell rows.
r1.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Set r1 = Nothing
2 голосов
/ 26 августа 2011
Dim rng As Range 
Dim counter As Long  

Set rng = Range(Range("G2"),Range("B1").End(xlDown).Offset(0, 5))  
For counter = rng.Rows.Count to 1 Step -1   
   If Len(rng.Cells(counter).Value) = 0 Then rng.Cells(counter).EntireRow.Delete
Next
...