2013-09-25 47 views
0

我是VBA的初學者,如果其他值的列爲「未完成」,並且想要刪除列A中的重複行「或」空「如果另一列的值爲「未完成」或「空」,則刪除重複行

我使用下面的一段代碼來刪除」沒有完成「或」空「,但我想不出如何找到重複的值和其他列值是」未完成「

如果範圍( 「F」 & p)。價值= 「未完成」 或範圍( 「F」 & p)。價值= 「」 然後行(p)的.Delete(這適用於一個行的刪除)

我用下面的函數爲代碼的一部分,但它的語法錯誤 如果WorksheetFunction.Countif(A:A,A2)> 1,則(查找重複)

這樣 昏暗數p作爲龍

For p = Range("f1").End(xlDown).Row To 1 Step -1 
If WorksheetFunction.Countif(A:A,A2)>1 then 
If Range("f" & p).Value = "Not Completed" or Range("f" & p).Value = "" Then Rows(p).Delete 

Next p 

EX

ColA | ColB | colF

21 | 456 |通過

25 | 673 |通過

21 | 679 |未完成 - 刪除

22 | 568 |通過

22 | 367 |尚未完成 - 刪除

25 | 456 |空單元格 - 刪除

回答

0

您可以使用此

WorksheetFunction.CountIf(Range("A:A"), Range("A3")) > 1 

不過,也有一些問題,你的代碼。

1)您正在使用End(xlDown)進行循環。在你的例子中,由於列F的最後一行是空的,所以End(xlDown)將返回倒數第二行。更好地使用另一列。

2)您是否需要重新考慮您的字符串匹配機制?例如

?"Not completed"="Not Completed" 
False 

所以在你的情況下,行21 | 679 |未完成不會被刪除。如果有空格,則比較也會返回false。

3)WorksheetFunction.CountIf(Range("A:A"), Range("A3"))

您應相應地改變你的第二個參數,你遍歷有關行。

例如通過使用Offset

1

嘗試此(如果有A列值的重複並且兩者都具有在F欄通,則它不會被刪除):

Sub SO_18996725() 
    Dim p As Long 
    ' Start from last row of used range 
    For p = ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row To 1 Step -1 
     If WorksheetFunction.CountIf(Range("A:A"), Range("A" & p)) > 1 Then 
      If (InStr(1, Range("F" & p).Text, "Not Completed", vbTextCompare) > 0) Or IsEmpty(Range("F" & p)) Then 
       Debug.Print "Delete row: " & p 
       Rows(p).Delete 
      End If 
     End If 
    Next p 
End Sub 
相關問題