我正在運行向不同代碼充電的員工的報告。該報告給了我下面的列:根據列中的非空單元格刪除行的VBA代碼
的Emp#/ EMP名稱/價格/ TermDate
如果員工離開,再有就是在TermDate列中的值。
由於單元格中的值可能是任何日期,我想編寫一個宏來搜索列表並刪除第四列中的值不爲空的任何行。
我發現了幾個如何根據空白單元格或基於特定值刪除行的示例,但沒有列出非空白值。
每個報告都有不同數量的行,所以我需要幫助根據最後一列的值選擇範圍並刪除範圍內的行。
我正在運行向不同代碼充電的員工的報告。該報告給了我下面的列:根據列中的非空單元格刪除行的VBA代碼
的Emp#/ EMP名稱/價格/ TermDate
如果員工離開,再有就是在TermDate列中的值。
由於單元格中的值可能是任何日期,我想編寫一個宏來搜索列表並刪除第四列中的值不爲空的任何行。
我發現了幾個如何根據空白單元格或基於特定值刪除行的示例,但沒有列出非空白值。
每個報告都有不同數量的行,所以我需要幫助根據最後一列的值選擇範圍並刪除範圍內的行。
這假定該柱,以檢查是柱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
考慮對數據使用過濾器來代替。你沒有提到什麼版本的Excel,但在2010年轉到數據選項卡,選擇termdate列,然後點擊「過濾器」。
注意在列的第一個單元格中出現一個小小的下拉箭頭。點擊那個,然後 取消選擇所有,但「空白」的選擇。什 - 洛杉磯。
那樣的話,如果你需要的話,數據仍然存在。
哦,並且在應用過濾器後,在該列的第一個單元格中將保留一個小漏斗圖標,以顯示它是一個過濾列。
我的解決辦法是:
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
如果我理解正確的話,那麼你要這樣呢?
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.
最快的方法。使用.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