簡體   English   中英

VBA-根據列值刪除行

[英]VBA - delete rows based on a column value

我試圖為ActiveX控件按鈕編寫一小段代碼。 我在VBA上不是最好的,並且只能在空閑時間這樣做,所以請您留心一點...我有一個“主庫存”電子表格。 列“ B”到“ N”包含有關庫存的數據。 發貨后,在“ N”列中用“ Y”表示(代表“是”)。

  1. 我希望我的Activex控件按鈕僅刪除其中“ N” =“ Y”列的行(B3:N98)。
  2. 我不希望刪除格式或公式-僅值。
  3. 我希望在刪除行后將數據壓縮並推到列表的頂部。

我在#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM