gpt4 book ai didi

vba - 如何检查 2 列中的重复项并将整行复制到另一张表中?

转载 作者:行者123 更新时间:2023-12-04 20:57:25 28 4
gpt4 key购买 nike

如果其中任何一个包含重复项,我想检查列 A 和 F 中的重复项,我需要宏将整行复制到同一工作簿中的另一个文件中。
The pic is here.

请有人帮我解决这个问题。
下面是我为检查 A 中的重复项而编写的宏,然后将整行复制到名为“dup”的新工作表中

    Option Explicit
Sub FindCpy()
Dim lw As Long
Dim i As Integer
Dim sh As Worksheet

Set sh = Sheets("Dup")
lw = Range("A" & Rows.Count).End(xlUp).Row

For i = 1 To lw 'Find duplicates from the list.
If Application.CountIf(Range("A" & i & ":A" & lw), Range("A" & i).Text) > 1 Then
Range("B" & i).Value = 1
End If
Next i

Range("A1:B10000").AutoFilter , Field:=2, Criteria1:=1
Range("A2", Range("A65536").End(xlUp)).EntireRow.Copy
sh.Range("A65536").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
Selection.AutoFilter
End Sub

最佳答案

如果您想检查任何单元格 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语句和代码中的不合格范围(除此之外是正确的)可能会引起一些麻烦。更好地使用限定范围和明确的工作表名称。

编辑

您可以通过使用完整列进行匹配来使事情变得更容易:
'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

关于vba - 如何检查 2 列中的重复项并将整行复制到另一张表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com