2016-11-18 182 views
0

你好,我想刪除一個表的空行,我發現問題。刪除表格的空行

Dim rng As Range 
    rng = Sheets("NewForecast").ListObjects("Table").Range.Select 
    If rng.Rows = 0 Then 
    rng.EntireRow.Delete 
    End If 

我不知道怎麼寫,我試了幾種方法,看了這裏,但無法找到一個具體的解決方案。如果行是完全空的,我想刪除它。任何幫助非常感謝!

+0

請在我的回答下面檢查我的代碼,並讓我知道它是否適合您的需求 –

回答

0

嘗試像

Dim ws as Worksheet 
Set ws = ActiveWorkbook.Worksheets("SHEET NAME HERE") 
Dim lRow as long 
Dim rng as range 

lRow = ws.Range("A" & Rows.Count).end(xlUp).row 

'Assuming your table starts in column A, put in start/end row numbers 
For each rng in ws.Range("A1:A" & lRow) 
    If ws.Range("A" & rng.row) = vbNullString then 
     ws.Rows(rng.row).Delete 
    End if 
Next rng 
+0

不工作..第一行和第三行出現錯誤。 –

+0

試試我的更新版本。我在飛行中寫了這個。 – InternInNeed

+0

沒有。此行對於ws.Cells(Cells(start row,1),cells(end row,1))中的每個rng不起作用 –

0

當試圖在一個表中刪除行,總是用一個落後For環(For i = 100 to 1 Step -1例如)。

當檢查某個Range或是否完全爲空時,WorksheetFunction.CountA非常方便。

Option Explicit 

Sub DeleteEmptyRows() 

Dim Rng   As Range 
Dim LastRow  As Long 
Dim lRow  As Long 

With Sheets("NewForecast") 
    Set Rng = .ListObjects("Table").Range 

    ' find last row in "Table" 
    LastRow = .ListObjects("Table").Range.Rows.Count 

    ' loop through all "Table" rows, loop backwards when deleting 
    For lRow = LastRow To 2 Step -1 
     ' use CountA to check if entire row is empty 
     If WorksheetFunction.CountA(.Rows(lRow)) = 0 Then 
      .Rows(lRow).EntireRow.Delete 
     End If 
    Next 

End With 

End Sub 
+0

沒有工作,代碼似乎對我很好..不知道爲什麼.. –

+0

@LeandroMoreira你有'NewForecast「表中的'表'對象?那個表的名字是「Table」? –

+0

是的。它是表。但我設法工作..看看。 –

0

這是可能的,而不循環。

  1. 過濾表格,顯示的值是您要刪除
  2. 找到的第一個「可刪除」行(其中cell.value =「」)在表的最後一列(將最通常的那些大多數人不使用最後一列),
  3. 然後找到最後一個「deletable」行(其中cell.value =「」)。

然後用這個:

Rows(firstRow & ":" & lastRow).EntireRow.Delete 

這可能是昂貴的(需要較長時間),如果你的價值觀的領域是非常大的,但適用於表以及表,快於(更好)循環。

+0

我喜歡你的想法,認爲這可以工作,雖然它說「錯誤13」,類型不匹配 –

+0

是的,我只是扔了一些步驟。 –

1

我成功了!感謝所有真正打開我的思想的人。看下面,它很簡單,做我想做的事情,宏也變得更快。

Range("Table[#Headers]").Select 
    Selection.AutoFilter 
    ActiveSheet.ListObjects("Table").Range.AutoFilter Field:=2, Criteria1:="=" 
    Range("Table").Select 
    Range(Selection, Selection.End(xlToRight)).Select 
    Range(Selection, Selection.End(xlDown)).Select 
    Selection.EntireRow.Delete 
    Range("Table[#Headers]").Select 
    ActiveSheet.ShowAllData 
+0

我添加了一些推薦的代碼來擺脫宏錄製器喜歡放在那裏的所有「選擇」。不確定它會在第一次嘗試中發揮作用,但希望能有所幫助。可能需要一些調試。 –