vba - 删除不包含特定单词

时间:2017-04-12 16:46:58

标签: vba excel-vba excel

我正在尝试删除Q列中不包含特定单词的行,然后重新计算sum行。现在这是我正在设计的代码的一部分,所以我只发布这部分,因为其余的代码工作正常。

至于我的数据,我有一个引用列表及其信息,我添加了相应区域的列(列Q),所以我想过滤我想要进行分析的区域。对于总行,我需要重新计算数字,因为它应该只反映该地区的总和。

我的数据范围已合并标题和总行,因此不确定这是否会使情况复杂化。

Sub test()

Dim Rng As Range
Dim x, lngLastRow As Long
Dim ws As Worksheet

Set ws = Worksheets("A")
lngLastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row
Set Rng = Range("Q5:Q" & lngLastRow - 1)
For x = Rng.Rows.Count To 1 Step -1
If InStr(1, Rng.Cells(x, 17).Value, "NW") = 0 Then
Rng.Cells(x, 1).EntireRow.Delete
End If
Next x
End Sub

现在我的当前代码只删除了合并标题以外的所有内容,因此我需要帮助来过滤每个区域。你可以看到我没有重新计算总和行,因为我的代码到目前为止还没有工作,所以我还没有添加那部分。

现在,我尝试的第二种方法是使用过滤器功能,它给了我“Range类失败的运行时错误1004自动过滤方法”,这就是我尝试过的代码。

   With ws.Range("B5", "Q" & lngLastRow)
   .AutoFilter
   .AutoFilter Field:=17, Criteria1:="NW"
   End with

所以我不知道哪种方式会更好用,或者你们有不同的方法。

以下是我的数据显示。

enter image description here

2 个答案:

答案 0 :(得分:2)

您需要将下面代码行中的列值更改为1而不是17,如下所示:

If InStr(1, Rng.Cells(x, 1).Value, "NW") = 0 Then

这是因为您正在访问之前设置的范围内的单元格,该范围只有1列:列Q.因此,列Q是Rng变量的第一列。第17列是您范围内第一列(第Q列)的17列,即AG列。如果您将代码编写为ws.Cells(x, 17).Value,则代码将选择正确的列,因为这将是电子表格的第17列,而不是您设置的范围的第17列。

答案 1 :(得分:0)

您可以尝试这样的事情......

Sub FilterAndDeleteRows()
Dim ws As Worksheet
Dim lr As Long
Set ws = ActiveSheet
lr = ws.Cells(Rows.Count, 2).End(xlUp).Row
ws.AutoFilterMode = False
ws.Range("B2:Q4").AutoFilter field:=16, Criteria1:="NW"
On Error Resume Next
If ws.Range("Q4:Q" & lr).SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then
    ws.Range("Q5:Q" & lr).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
ws.AutoFilterMode = False
End Sub