如果您想检查是否any单元格 A 或单元格 F 在其自己的列中重复,您所需要做的就是Or
两个条件:
If (Application.CountIf(Range("A" & i & ":A" & lw), Range("A" & i).Text) > 1) Or _
(Application.CountIf(Range("F" & i & ":F" & lw), Range("F" & i).Text) > 1) Then
另一方面,如果您希望通过比较来重复同时地A 列和 F 列到其他行,那么您将需要CountIfs
If Application.CountIfs(Range("A" & i & ":A" & lw), Range("A" & i).Text, _
Range("F" & i & ":F" & lw), Range("F" & i).Text) > 1 Then
最后,Selection.Autofilter
语句和代码中的不合格范围(除此之外是正确的)可能会引起一些麻烦。更好地使用限定范围和明确的工作表名称。
EDIT
您可以通过使用完整的列进行匹配来使事情变得更容易:
'Case 1:
If (Application.CountIf(Range("A:A"), Range("A" & i).Text) > 1) Or _
(Application.CountIf(Range("F:F"), Range("F" & i).Text) > 1) Then
'Case 2:
If Application.CountIfs(Range("A:A"), Range("A" & i).Text, _
Range("F:F"), Range("F" & i).Text) > 1 Then
使用案例 1,并对您的代码进行一些改进,以便我们使用限定范围,您的代码将变成这样,(请仔细阅读注释):
Option Explicit
Sub FindCpy()
Dim lw As Long, i As Long
With ActiveSheet ' <------ use an explicit sheet if you can i.e. With Sheets("srcSheet")
lw = .Range("A" & .Rows.count).End(xlUp).row
For i = 2 To lw ' <----------- start at row 2, row 1 must be a header to use autofilter
If (Application.CountIf(.Range("A:A"), .Range("A" & i).text) > 1) Or _
(Application.CountIf(.Range("F:F"), .Range("F" & i).text) > 1) Then
.Range("B" & i).value = 1
End If
Next i
With .Cells.Resize(lw)
.AutoFilter Field:=2, Criteria1:=1
.Offset(1).Copy
Sheets("Dup").Range("A65536").End(xlUp).Offset(1).PasteSpecial xlPasteValues
.AutoFilter
End With
End With
Application.CutCopyMode = False
End Sub