根据搜索键 VBA 删除行 [英] Delete Row based on Search Key VBA

查看:37
本文介绍了根据搜索键 VBA 删除行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 VBA 删除在 B 列中找到值X"的每一行.但是,我遇到了三个问题:

I am trying to delete every row in which the value "X" is found in column B using VBA. However, I'm having three problems:

  1. 我无法使用 cell.find 方法(参见下面的代码)让我的 VBA 代码从活动单元格向下移动到下一个单元格 (B3)
  2. 我的代码不会删除在列 B 中找到值X"的整行
  3. B 列中的数据量可能会有所不同:它可能在今天结束于 B10,或明天结束于 B100(见下面的屏幕截图)

不胜感激任何帮助.

Sub RemoveRows()   
    Dim strLookFor As String
    Dim strRow As String

    Worksheets("Sheet1").Range("B2").Activate

    strLookFor = "X"
    strRow = Range("B2").Address

    Do Until ActiveCell.Value = ""        
        MsgBox (ActiveCell.Value)        
        If ActiveCell.Value = strLookFor Then
            Rows.Delete (strRow)
        End If            
        strRow = Cells.Find(what:=strLookFor).Address
    Loop

    MsgBox ("Deleted all rows with value " & strLookFor)    
End Sub

推荐答案

使用 AutoFilter 比范围循环更有效

Using an AutoFilter is much more efficient than a range loop

Sub QuickCull()
Dim ws As Worksheet
Dim rng1 As Range
Set ws = Sheets("Sheet1")
Set rng1 = ws.Range(ws.[b2], ws.Cells(Rows.Count, "B").End(xlUp))
Application.ScreenUpdating = False
With ActiveSheet
        .AutoFilterMode = False
        rng1.AutoFilter Field:=1, Criteria1:="X"
        rng1.Offset(1, 0).EntireRow.Delete
        .AutoFilterMode = False
    End With
Application.ScreenUpdating = True
End Sub

这篇关于根据搜索键 VBA 删除行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆