2017-04-12 116 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 
相關問題