2017-04-12 123 views
1

我想删除不包含Q列中特定单词的行并重新计算总和行。现在这是我设计的代码的一部分,所以我只发布这个部分,因为其余的代码工作得很好。vba - 删除不包含特定单词的行

至于我的数据,我有一个列表和他们的信息,我为他们相应的区域添加了一列(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 

现在我现在的代码只是删除了合并标题以外的所有东西,所以我需要帮助来筛选每个区域。而且你可以看到我还没有重新计算总和行,因为我的代码迄今还没有工作,所以我还没有添加那个部分。

现在,我试过的第二种方法是使用过滤器函数,它给我“范围类失败的运行时错误1004自动过滤方法”,这是我试过的代码。

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

所以我不知道哪种方式会更好地工作,或者如果你们有不同的方法。

这是显示我的数据。

enter image description here

回答

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列。

+0

谢谢这就是我要找的。 – sc1324

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 
相关问题