0

我是 VBA 的初学者,如果其他值的列是“未完成”或“空”,我想删除 A 列中的重复行

我使用以下代码删除“未完成”或“空”,但我不知道如何找到重复值以及其他列的值是“未完成”

If Range("f" & p).Value = "Not Completed" 或 Range("f" & p).Value = "" Then Rows(p).Delete (这适用于删除一行)

我使用以下函数作为代码的一部分,但它的语法错误 If WorksheetFunction.Countif(A:A,A2)>1 then (查找重复项)

像这样 Dim p As Long

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

前任

科尔A | 科尔B | colF

21 | 第456章 经过

25 | 第673章 经过

21 | 第679章 未完成 - 删除

22 | 第568章 经过

22 | 367 | 未完成 - 删除

25 | 第456章 空单元格 - 删除

4

2 回答 2

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
于 2013-09-25T06:26:18.620 回答
0

你可以用这个

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

但是,您的代码存在一些问题。

1)您正在使用End(xlDown)for 循环。在您的示例中,由于 F 列的最后一行为空,End(xlDown)因此将返回倒数第二行。最好使用另一列。

2)你需要重新考虑你的字符串匹配机制吗?例如

?"Not completed"="Not Completed"
False

所以在你的情况下,第 21 行 | 第679章 未完成不会被删除。如果有任何尾随空格,则比较也将返回 false。

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

当您遍历相关的行时,您应该相应地更改您的第二个参数。

例如通过使用Offset

于 2013-09-25T06:13:45.647 回答