【问题标题】:Delete rows from excel using values from a column in another sheet?使用另一个工作表中的列中的值从excel中删除行?
【发布时间】:2016-01-22 21:12:29
【问题描述】:

我正在处理一个包含多列和大约 6000 行的 Excel 工作表。 Sheet1 将包含主要信息。(R 的 6000 行和列)。 Sheet2 是我需要用于过滤/删除这些行的例外列表。

现在这就是我正在使用的,它只能找到完全匹配。我需要这个来从 sheet2 中查找异常,即使它们是另一个单词的一部分。

例如:当我运行它时,它将查找并删除仅包含单词 hello 的每一行。但不是 hello world 或 hello foo。我需要这个来删除带有 hello world 和 hello foo 的行。

我正在尝试以这种方式进行设置,以便我可以简单地向我的例外列表中添加更多项目并根据需要删除更多行。

Sub CheckA()
Dim LR As Long, i As Long
With Sheets("IR Temp")
    LR = .Range("A" & Rows.Count).End(xlUp).Row
    For i = LR To 1 Step -1
        If IsNumeric(Application.Match(.Range("A" & i).Value, Sheets("Exceptions").Columns("A"), 0)) Then .Rows(i).Delete
    Next i
End With
End Sub

我怎样才能使这不那么具体?我知道它正在按应有的方式工作并且正在找到完全匹配的内容,但是如果找到该值与其他字符的任何组合,我需要它来查找并删除该行。

【问题讨论】:

  • 我不会投票结束这个问题,但我已经在至少六个其他问题中讨论过这个问题。见Set Auto Filtering multiple wildcards。该 Q 也有一些链接可以从通配符匹配中排除某些值。
  • 我认为使用多个通配符的自动过滤将在哪里进行,但这让我一次放置一个异常或过滤项目,而不是从第二张表的第一列中提取它。我需要这个来查看该工作表并获取要过滤掉的项目列表,因为我不会是唯一更新此例外列表的人,并且稍后可能会由另一个程序更新。
  • 工作表上的任何内容都可以读入数组并循环播放。 AutoFilter method 比循环单个删除更有效(这也可能无法涵盖每个出现)。
  • 圣牛@Jeeped 我刚刚阅读了您链接的答案,并通过使用Scripting.Dictionary 的键作为Criteria 让我大吃一惊。 Whatttttttttttttt 好扎实
  • @DanWagner - 谢谢!该方法的答案不断演变,但我对结果感到满意。对大块数据进行快速测试。

标签: vba excel excel-2010 autofilter


【解决方案1】:

MATCH function 可以接受通配符匹配,但您需要反转识别要删除的行的方式。只需在标准 rtem 前加上星号后缀即可(例如 Chr(42) )。

您的代码没有删除多次出现的条件值。可能更好地循环它,直到没有更多的匹配。由于 MATCH 在不匹配时返回错误,因此最好依靠 COUNTIF function 返回大于零的值。

Sub CheckA()
    Dim str As String, a As Long, vSTRs As Variant

    With Worksheets("Exceptions")
        vSTRs = .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)).Value2
    End With

    With Sheets("IR Temp")
        For a = LBound(vSTRs, 1) To UBound(vSTRs, 1)
            If CBool(Len(Trim(CStr(vSTRs(a, 1))))) Then
                str = Chr(42) & vSTRs(a, 1) & Chr(42)
                Do While CBool(Application.CountIf(.Columns(1), str))
                    .Rows(Application.Match(str, .Columns(1), 0)).EntireRow.Delete
                Loop
            End If
        Next a
    End With
End Sub

这将比识别要删除的非连续行的块或联合更耗时,但它会完成工作。关闭屏幕更新和计算等环境变量以加快运行速度。

【讨论】:

  • 我现在遇到“Excel VBA 运行时错误 '13' 类型不匹配”我知道为什么并且我正在阅读更多内容。我知道之前没有提到这一点,但是在 Sheets("IR Temp") A 列中还有数字和 % : % ? $ _ 。 ( ) 也是在 Worksheets("Exceptions") 过滤器列表中。
  • 在这种情况下,我最初来自 Q 的 cmets 的建议会更合适。
【解决方案2】:

下面假设您要搜索的单词列表在 Sheet2 A 列中,并且您要检查它们的列表是 Sheet1 A 列起始行 2。可能有比嵌套循环更好的方法,但我们这里有将您的单词列表放入一个数组中,遍历我们想要查看它们是否包含其中一个单词的所有单元格,并为每个单元格循环检查列出的单词之一是否存在。

Public Sub testing()

Dim x As Integer
Dim i As Integer
Dim ws As Worksheet
Dim listws As Worksheet
Dim endList As Integer
Dim endR As Integer
Dim arr() As Variant

Set ws = ThisWorkbook.Worksheets("Sheet1")
endR = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
Set listws = ThisWorkbook.Worksheets("Sheet2")
endList = listws.Cells(ws.Rows.Count, "A").End(xlUp).Row
arr = listws.Range("A1:A" & endList)

x = 2
While x <= endR
    For i = 1 To UBound(arr, 1)
        If InStr(ThisWorkbook.Worksheets("Sheet1").Cells(x, 1).Value, arr(i, 1)) > 0 Then
            ThisWorkbook.Worksheets("Sheet1").Cells(x, 1).EntireRow.Delete
        End If
    Next i
    x = x + 1
Wend

End Sub

【讨论】:

  • 你是对的,这确实有效,但不是我需要的。我仍然需要它来使用第二张工作表作为我可以添加的工作列表。我不想在 VBA 中添加我需要从该列表中过滤掉的每个项目,因为越来越多的项目必须轻松更新。如果我理解正确的话,Jeeped 已经为我指明了使用数组的方向。或者,也许我现在比开始时更困惑。我确实知道的是,由于我对编程如此陌生,所以我还有很多阅读要做。
  • 这有点为我工作!感谢这个 :D 现在我遇到的唯一问题是我必须运行宏几次才能删除所有行。它有时会错过其中的一些。除此之外,我的例外列表运行良好,一切都在顺利进行。不过,我需要对其进行一些修改。
  • 现在我的列表大约是原始大小的三分之一,我发现我有一些(几乎)重复的项目,我需要弄清楚如何摆脱它们。例如 sdf_left.top.var.status 和 sdf_left.top.var.value 对我来说是两个单独的行,但我只需要其中一个。我不能只将 .status 或 .value 添加到我的例外列表中,因为我有其他项目我不想最后用 .value 或 .status 过滤。 sdf_left.top.var.status ~需要删除。 sdf_left.top.var.value ~需要留下 sdf_left.top.bit.value ~需要留下 sdf_left.right.var.status ~需要留下
  • 你不能把整个 sdf_left.top.var.status 放在你的删除词列表中吗?
  • 如果这是唯一要过滤的并且我知道每个组合的名称,那将起作用。在这个 6k 行的小型数据库中,这是可能的。我的一些清单超过 15-25k 行。如果我添加每一个,它可能会添加数百个例外。我明白如果我这样做一次,那将是永远的。直到我有一个新的数据库。部分问题是,我不知道数据库中的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2023-03-20
  • 2019-09-09
  • 2020-12-20
  • 1970-01-01
相关资源
最近更新 更多