[英]VBA - delete rows based on a column value
我試圖為ActiveX控件按鈕編寫一小段代碼。 我在VBA上不是最好的,並且只能在空閑時間這樣做,所以請您留心一點...我有一個“主庫存”電子表格。 列“ B”到“ N”包含有關庫存的數據。 發貨后,在“ N”列中用“ Y”表示(代表“是”)。
我在#2上取得了成功,但在#1或#3上卻沒有。 我正在刪除所有行,但似乎無法正確顯示“ If”語句以僅識別那些“ Y”值。
任何幫助是極大的贊賞。
Private Sub CommandButton1_Click()
On Error Resume Next
For I = 3 To 498
If Range(I, "N").Text = "Y" Then
Range("B3:N27").SpecialCells(xlCellTypeConstants).ClearContents
End If
Next I
End Sub
刪除行時,您需要從底部開始並向上移動,以使其余行號保持不變。 列“ N”為14,因此您可以使用這樣的邏輯。
Sub DeleteRows()
Dim I As Long
For I = 498 To 3 Step -1
If Cells(I, 14).Value = "Y" Then
Rows(I).EntireRow.Delete
End If
Next I
End Sub
一種更快的方法是創建一個范圍對象,以保存標記為刪除的所有行,然后在最后一次全部刪除。 在Excel中,在循環中一一刪除行可能會非常緩慢,特別是隨着行數的增加而增加時。
嘗試這個:
Public Sub DeleteRowsWithRange()
Dim rngLoop As Range
Dim rngMyRange As Range
For Each rngLoop In Columns("N").Cells
If rngLoop.Value = "" Then ' This is your exist clause. You can change this depending on your worksheet structure.
Exit For
ElseIf rngLoop.Value = "N" Then
If rngMyRange Is Nothing Then
Set rngMyRange = rngLoop.EntireRow
Else
Set rngMyRange = Union(rngMyRange, rngLoop.EntireRow)
End If
End If
Next rngLoop
rngMyRange.Delete xlShiftUp
Set rngLoop = Nothing
Set rngMyRange = Nothing
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.