【问题标题】:Delete rows with multiple conditons using VBA使用 VBA 删除具有多个条件的行
【发布时间】:2015-08-24 18:34:51
【问题描述】:

我在 excel 中有一个原始数据作为 xls 扩展。 我想根据 3 个条件删除行。

  1. 删除 c 列中包含文本“No”的字段的行
  2. 删除 D 列中包含文本“ExtBUD”和“ExtItaly”字段的行
  3. 删除 C 列和 D 列中的空白行。

这是数据

      A            B               C               D
       Fname         Lname        activeconnect      Clustername
1.     ram           raju            Yes             ExtIndia
2.     John          reynold         Yes             ExtBUD
3.     Sree           olaf           No              ExtUSA
4.                consider as Blank row
5.     alois         lobmier           No             ExtPeru
6.      Niko          papa            yes             ExtItaly

示例输出应如下所示

         A            B               C               D
       Fname         Lname        activeconnect      Clustername
1.     ram           raju            Yes             ExtIndia

这里我的代码适用于第一个条件,并且还删除了具有“ExtBUD”字段的行。谁能帮帮我

Sub Import()
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

row_number = 1
Do
DoEvents
   row_number = row_number + 1
   active_connect = Sheets("WX Messenger Export 20150819").Range("U" & row_number)
   cluster_name = Sheets("WX Messenger Export 20150819").Range("X" & row_number)
   If InStr(active_connect, "No") >= 1 Then
   If InStr(cluster_name, "ExtBUD") >= 1 And InStr(cluster_name, "ExtItaly") >= 1 Then

   Sheets("WX Messenger Export 20150819").Rows(row_number & ":" & row_number).Delete
   row_number = row_number - 1
   End If
    End If

 Loop Until active_connect = ""

End Sub

【问题讨论】:

  • 如果这是一次性练习,您可能需要使用自动过滤器来过滤相关行并删除它们

标签: vba excel


【解决方案1】:

如果是If Then,您必须在条件中使用or

Sub Import()
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

row_number = 1
Do
DoEvents
   row_number = row_number + 1
   active_connect = Sheets("WX Messenger Export 20150819").Range("U" & row_number)
   cluster_name = Sheets("WX Messenger Export 20150819").Range("X" & row_number)
   If InStr(active_connect, "No") >= 1 or (InStr(cluster_name, "ExtBUD") >= 1 And InStr(cluster_name, "ExtItaly") >= 1) Then 

   Sheets("WX Messenger Export 20150819").Rows(row_number & ":" & row_number).Delete
   row_number = row_number - 1
   End If

 Loop Until active_connect = ""

End Sub

但您仍然没有检查空白行。因此也将以下部分添加到 if 条件中:or (Sheets("WX Messenger Export 20150819").Range("C" & row_number) = "" and Sheets("WX Messenger Export 20150819").Range("D" & row_number) = "")

最终的代码是

Sub Import()
lastRow = Cells(Rows.Count, 1).End(xlUp).Row

row_number = 1
Do
DoEvents
   row_number = row_number + 1
   active_connect = Sheets("WX Messenger Export 20150819").Range("U" & row_number)
   cluster_name = Sheets("WX Messenger Export 20150819").Range("X" & row_number)
   If InStr(active_connect, "No") >= 1 or (InStr(cluster_name, "ExtBUD") >= 1 And InStr(cluster_name, "ExtItaly") >= 1) or (Sheets("WX Messenger Export 20150819").Range("C" & row_number) = "" and Sheets("WX Messenger Export 20150819").Range("D" & row_number) = "") Then 

   Sheets("WX Messenger Export 20150819").Rows(row_number & ":" & row_number).Delete
   row_number = row_number - 1
   End If

 Loop Until active_connect = ""

End Sub

【讨论】:

    【解决方案2】:

    试试这个:

    Public Sub deleteRow()
    
        Dim row, lastRow As Integer
    
        With Sheets("WX Messenger Export 20150819")
    
            'Set the start row
            row = 2
    
            'Get the last row
            lastRow = .Range("A2").SpecialCells(xlCellTypeLastCell).row
    
            'loop from first row to last row
            Do While row <= lastRow
    
                'If condition are equal, delete row
                If .Range("C" & row) = "No" Or .Range("D" & row) = "ExtBUD" Or .Range("D" & row) = "ExtItaly" Or (.Range("C" & row) = "" And .Range("D" & row) = "") Then
    
                    .Rows(row).Delete
    
                    lastRow = lastRow - 1
    
                'Else go to next row
                Else
    
                    row = row + 1
    
                End If
    
            Loop
    
        End With
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多