【问题标题】:Delete rows based on a range of conditions (plural)根据一系列条件删除行(复数)
【发布时间】:2019-08-17 03:38:17
【问题描述】:

我已经有一段时间没有使用 VBA 了。我有一系列唯一值,我想在表格中搜索。如果这些值存在于所述表中,则删除整行。

我能够遍历并删除特定的奇异值,但在处理多个值时遇到了困难。我试过用 Range() 和一个数组替换“30ExGEPAc30Q4”(下面的代码),但不太明白。到目前为止,这是我所得到的:

Sub test()

Dim x As Long
Dim lastrow As Long

lastrow = Sheets("LRP").ListObjects("Data_LRP").Range.Rows.Count

Worksheets("LRP").Activate
    For x = lastrow To 1 Step -1
        If Cells(x, 1).Value = "30ExGEPAc30Q4" Then
            Rows(x).Delete
        End If
    Next x
End Sub

【问题讨论】:

  • 像这样使用IfAndIf Cells(x, 1) = "30xGEPAc30Q4" And Cells(x, 2) = "Whatever" Then 以为您没有将CellsRows 引用到任何工作表,所以请注意这一点。您可以嵌套任意数量的条件,但这不是要走的路。
  • @Damian,感谢您的回复!我想我应该提到我的条件是一系列单元格,而不是静态值。我使用静态字符串“30xGEPAc30Q4”来测试我的删除行循环是否按预期工作,但我希望用我的动态单元格范围替换它。感谢您的帮助!
  • @Sam 感谢您的快速回复!该线程有助于完成我上面的工作,但我希望搜索和删除多个值。我正在寻求帮助,用一系列值替换他们的奇异搜索值。在一个范围内搜索存在于另一个范围内的任何值。感谢您的帮助!
  • 如果您要使用数组,那么您将在For x = lastrow To 1 Step -1 之后添加另一个循环来检查数组中的每个值。例如For i = LBound(Arr) To UBound(Arr),您的If x = Arr(i),在End If下方添加Next

标签: excel vba range


【解决方案1】:

如果我对您的理解正确,这就是您要实现的目标;我已经清理了一些不必要的部分,现在您只需根据需要编辑 x 和 lastrow。

Sub test()

Dim x As Long
Dim lastrow As Long

'lastrow = Sheets("LRP").ListObjects("Data_LRP").Range.Rows.Count
x = 1
lastrow = 21


'Worksheets("LRP").Activate
Do While x <= lastrow
'    For x = lastrow To 1 Step -1
        If Cells(x, 1).Value = "30ExGEPAc30Q4" Then
            Rows(x).Delete
            lastrow = lastrow - 1
        Else
            x = x + 1
        End If
'    Next x

Loop
End Sub

【讨论】:

  • 谢谢!我不得不玩一下,但 Do While 循环就是答案。我在下面发布了工作产品
【解决方案2】:

对于那些好奇的人,它最终看起来像这样。感谢大家的帮助!

Sub Cull()

Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim sht1row As Long
Dim sht2row As Long
Dim sht2total As Long
Dim DupID As String

Set sht1 = Worksheets("Data Form")
Set sht2 = Worksheets("LRP")
sht2.Activate
sht2total = Worksheets("LRP").ListObjects("Data_LRP").Range.Rows.Count
sht1row = 33

Do While sht1.Cells(sht1row, 2).Value <> ""

DupID = sht1.Cells(sht1row, 2).Value

    For sht2row = 2 To sht2total

        If DupID = Cells(sht2row, 1).Value Then

            Rows(sht2row).Delete
            sht2row = sht2row - 1
            Exit For

        End If

    Next

    sht1row = sht1row + 1

Loop

End Sub

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 1970-01-01
    • 2022-10-14
    • 2018-03-03
    相关资源
    最近更新 更多