Как удалить строку в листе на основе значений в 3 столбцах - PullRequest
0 голосов
/ 26 апреля 2020

Я должен удалить строку, если значения столбца столбца C, столбца D, столбца E той же строки равны нулю. например.

      ColumnA   Column B   ColumnC   ColumnD    ColumnE
 row1-    abc        xyz         0       abs        abx
 row2-    wqe        tuy         0         0          0
 row3    uhiu        khj       kjh       khk          0

здесь я должен удалить строку 2 только потому, что значения всех столбцов c, D, E равны нулю

Пожалуйста, помогите

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

Попробуй,

Sub test()
    Dim vDB, vR()
    Dim Ws As Worksheet, toWs As Worksheet
    Dim i As Long, n As Long
    Dim j As Integer

    Set Ws = ActiveSheet

    vDB = Ws.UsedRange

    For i = 1 To UBound(vDB, 1)
        If vDB(i, 3) = 0 And vDB(i, 4) = 0 And vDB(i, 5) = 0 Then
        Else
            n = n + 1
            ReDim Preserve vR(1 To 5, 1 To n)
            For j = 1 To 5
                vR(j, n) = vDB(i, j)
            Next j
        End If
    Next i
    Set toWs = Sheets.Add '<~~ set your sheet
    With toWs
        .Cells.Clear
        .Range("a1").Resize(n, 5) = WorksheetFunction.Transpose(vR)
    End With

End Sub
1 голос
/ 26 апреля 2020

Обратный l oop должен сделать эту работу. Попробуйте ниже:

Option Explicit

Public Sub DeleteRows()
    Dim i As Long, count As Long, lastRow As Long

    ' Replace Sheet1 with your sheetname
    With ThisWorkbook.Worksheets("Sheet2")

        ' Change C with your most consistent column letter
        ' (a column that has data always to make sure there's no possibility to miss the last row due to empty cells)
        lastRow = .Cells(.Rows.count, "C").End(xlUp).Row

        ' We do a reverse loop to not screw up the index
        For i = lastRow To 2 Step -1
            If .Range("C" & i).Value = "0" And .Range("D" & i).Value = "0" And .Range("E" & i).Value = "0" Then
                .Range("C" & i).EntireRow.Delete
                count = count + 1
            End If
        Next i
    End With

    ' Display some message
    If count > 0 Then
        MsgBox "Done!" & vbCrLf & "Deleted " & count & " row(s).", vbInformation + vbOKOnly, "Success"
    Else
        MsgBox "No matches found for deletion", vbInformation + vbOKOnly, "Success"
    End If
End Sub
0 голосов
/ 26 апреля 2020

Попробуйте этот код, быстрый и простой код.

Sub deleterow()

Dim i As Integer

i = 2
LastR = Cells(Rows.Count, 1).End(xlUp).row

For i = LastR To 2 Step -1
If Cells(i, 3).value = "0" And Cells(i, 4).value = "0" And Cells(i, 5).value = "0" Then
Cells(i, 1).EntireRow.delete
End If
Next i
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...