如何根据特定值删除Excel中的行

时间:2017-01-26 20:46:38

标签: excel excel-vba vba

我有一张10张的工作簿。每张工作表都有大约30,000行URL。我手上有很多URL(大约10个不同的URL),我需要保存数据。如果第一列(列A - URL)不包含其中一个URL,是否有办法删除所有工作表中的所有行。

例如,我想保留we.abc.us,ss.boli.us和3m.mark.us,并删除工作簿中所有工作表中的其余行。

Sub delete0rows()

Dim Worksheet As Excel.Worksheet
Dim lastRow As Long
Dim i As Integer

For Each Worksheet In Application.ThisWorkbook.Worksheets
lastRow = Worksheet.Cells(Rows.Count, 1).End(xlUp).Row

i = 1

    Do While i <= lastRow

        If Worksheet.Range("A" & i).Value = 0 Then
        Worksheet.Rows(i).Delete i = i - 1
        lastRow = lastRow - 1
        End
    i = i + 1
    Loop
Next Worksheet
End Sub

2 个答案:

答案 0 :(得分:1)

我建议您使用步骤-1:

引入反向For循环
Sub delete0rows()

Dim Worksheet As Excel.Worksheet
Dim lastRow As Long
Dim i As Integer

    For Each Worksheet In Application.ThisWorkbook.Worksheets
    lastRow = Worksheet.Cells(Rows.Count, 1).End(xlUp).Row

        For i = lastRow To 1 Step -1
            If Worksheet.Range("A" & i).Value = 0 Then
            Worksheet.Rows(i).EntireRow.Delete
            End If
        Next i
    Next Worksheet
End Sub

答案 1 :(得分:0)

我在一段时间后发现了这个潜艇。我不记得原作者是谁,或者我会相信他们。我确实略微调整它以将变量传递给它

关于这一点的好处是你可以通过传递空格分隔的字符串

来传递多个删除标准

基本上你可以给它开一行(如果你有标题)告诉它要查看的列,列所在的表和你的标准/标准。因此,例如,如果我希望它从第5行开始,在名为'cleanup'的工作表上检查下面的每一行,检查“''狗'和'鱼'字样的'D'列,我会写

致电DelRow(5,“D”,“清理”,“猫狗鱼”)

Public Sub DelRow(DataStartRow As Long, SearchColumn As String, SheetName As String, myTextString As String)
' This macro will delete an entire row based on the presence of a predefined word or set of words.
'If that word or set of words is 'found in a cell, in a specified column, the entire row will be 'deleted
'Note the seperator is a space. To change this modify the split parameter
'EXAMPLE CALL: Call DelRow(1, "AH", "Cut Data", "DEL")

Dim X As Long
Dim Z As Long
Dim LastRow As Long
Dim FoundRowToDelete As Boolean
Dim OriginalCalculationMode As Integer
Dim RowsToDelete As Range
Dim SearchItems() As String

SearchItems = Split(myTextString)

On Error GoTo ResetCalcs
OriginalCalculationMode = Application.Calculation
Application.Calculation = xlCalculationManual

With Worksheets(SheetName)
    LastRow = .Cells(.Rows.Count, SearchColumn).End(xlUp).Row

    Application.StatusBar = "**** Working on the '" & SheetName & "' Sheet: Number of Rows to be scanned(" & LastRow & "). Deletion keyword " & myTextString & " ***" 'Extra line added

    For X = LastRow To DataStartRow Step -1

        FoundRowToDelete = False

        For Z = 0 To UBound(SearchItems)
            If InStr(.Cells(X, SearchColumn).Value, SearchItems(Z)) Then
                FoundRowToDelete = True
                Exit For
            End If

        Next

        If FoundRowToDelete Then
            If RowsToDelete Is Nothing Then
                Set RowsToDelete = .Cells(X, SearchColumn)
            Else
                Set RowsToDelete = Union(RowsToDelete, .Cells(X, SearchColumn))
            End If

            If RowsToDelete.Areas.Count > 100 Then
                RowsToDelete.EntireRow.Delete
                Set RowsToDelete = Nothing
            End If
        End If

    Next

End With

If Not RowsToDelete Is Nothing Then
    RowsToDelete.EntireRow.Delete
End If

ResetCalcs:
Application.Calculation = OriginalCalculationMode

End Sub