gpt4 book ai didi

vba - 使用另一个工作表中的列中的值从 Excel 中删除行?

转载 作者:行者123 更新时间:2023-12-02 16:47:44 25 4
gpt4 key购买 nike

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

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

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

我正在尝试以这种方式进行设置,以便我可以简单地将更多项目添加到我的异常(exception)列表中,并根据需要删除更多行。

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

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

最佳答案

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

这比识别要删除的非连续行的 block 或联合要耗时一些,但它可以完成工作。一旦运行到您满意的程度,请关闭屏幕更新和计算等环境变量以加快速度。

关于vba - 使用另一个工作表中的列中的值从 Excel 中删除行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34956035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com