2014-10-28 69 views
0

我正在運行向不同代碼充電的員工的報告。該報告給了我下面的列:根據列中的非空單元格刪除行的VBA代碼

的Emp#/ EMP名稱/價格/ TermDate

如果員工離開,再有就是在TermDate列中的值。

由於單元格中的值可能是任何日期,我想編寫一個宏來搜索列表並刪除第四列中的值不爲空的任何行。

我發現了幾個如何根據空白單元格或基於特定值刪除行的示例,但沒有列出非空白值。

每個報告都有不同數量的行,所以我需要幫助根據最後一列的值選擇範圍並刪除範圍內的行。

回答

0

這假定該柱,以檢查是柱d

Sub RowKiller() 
    Dim col As String, N As Long, i As Long 
    col = "D" 
    N = Cells(Rows.Count, col).End(xlUp).Row 
    For i = N To 1 Step -1 
     If Cells(i, col).Value <> "" Then 
      Cells(i, col).EntireRow.Delete 
     End If 
    Next i 
End Sub 
0

考慮對數據使用過濾器來代替。你沒有提到什麼版本的Excel,但在2010年轉到數據選項卡,選擇termdate列,然後點擊「過濾器」。

注意在列的第一個單元格中出現一個小小的下拉箭頭。點擊那個,然後 取消選擇所有,但「空白」的選擇。什 - 洛杉磯。

那樣的話,如果你需要的話,數據仍然存在。

哦,並且在應用過濾器後,在該列的第一個單元格中將保留一個小漏斗圖標,以顯示它是一個過濾列。

0

我的解決辦法是:

Dim lng_LastRow As Long 
Dim lng_i As Long 

lng_LastRow = Range("A1").End(xlDown).Row 

For lng_i = 1 To lng_LastRow 

    If Len(Trim(Cells(lng_i, 4).Value)) > 0 Then 
     Rows(lng_i).Delete 
     lng_i = lng_i - 1 
    End If 


Next lng_i 
0

如果我理解正確的話,那麼你要這樣呢?

Sub DeleteNonEmptyRows() 

    Dim row As Integer, N As Integer 

    N = Cells(Rows.Count, "D").End(xlUp).Row 

    For row = N To 2 Step -1 
     If Not IsEmpty(Range("D" & row)) Range("A" & row).EntireRow.Delete 
    Next row 

End Sub 

假設TermDate在列D.

1

最快的方法。使用.Autofilter。無需循環...

Sub Sample() 
    Dim LRow As Long 
    Dim delRange As Range 

    With ThisWorkbook.Sheets("Sheet1") 
     '~~> Remove any filters 
     .AutoFilterMode = False 

     LRow = .Range("D" & .Rows.Count).End(xlUp).Row 

     With .Range("A1:D" & LRow) 
      .AutoFilter Field:=4, Criteria1:="<>" 
      Set delRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow 
     End With 

     '~~> Remove any filters 
     .AutoFilterMode = False 
    End With 

    If Not delRange Is Nothing Then delRange.Delete 
End Sub 
相關問題