2011-08-25 134 views
0

我想在一個範圍內,以刪除空行基於關閉空白單元格刪除行範圍

我的代碼如下所示:

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已經好心幫我解決了錯誤信息。該變量應該變暗爲LONG不是整數,因爲整數不能容納大了一些我的數據

此外的所有行,Jon49給了我一些代碼,這是很多MROE高效地爲這一過程:

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 

回答

4

它看起來像你應該嘗試使用Longicounter。使用Integer會導致溢出,至少在較新版本的Excel中,工作表中有超過100萬行。

+0

我會努力的時候了。應該反應也很長? – Chaostryder

+0

是的,櫃檯也應該是龍的。我已經更新了,謝謝。 – hmqcnoesy

+0

嘿所以我試了很久,代碼確實通過並刪除行(謝謝=))現在的問題是。它只是不停止。並繼續刪除列。你有什麼建議嗎? – Chaostryder

2
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 
+0

謝謝蒂姆,它可能是工人,但我使用了Jons代碼,因爲它不需要循環,而且工作速度更快。無論如何謝謝你! – Chaostryder

3

下面是一些簡單的代碼爲您提供:

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 
+0

嘿,謝謝,我改變了我的代碼,而不是實際上它運行得非常快,因爲一個循環需要更長的時間。謝謝 – Chaostryder

+0

酷,很高興它爲你工作。代碼仍然執行循環,它只是在Excel內部執行,因此代碼比VBA快得多。 – Jon49

+0

我會爲Jon給予接受的答案(我相信你可以改變它)。 :) +1 – aevanko