【问题标题】:Identifying duplicates when copy/paste of multiple cells into excel column将多个单元格复制/粘贴到 excel 列中时识别重复项
【发布时间】:2019-05-06 15:40:16
【问题描述】:

所以我试图找到一个解决方案,我可以将多个值从一列复制粘贴到另一列,并让它忽略已经存在的重复项。

我找到了这段代码,但它只有在我一次复制粘贴一个值时才有效。

有没有办法让它工作,所以它只会粘贴唯一的复制值,在列中已经不存在?

Private Sub Worksheet_Change(ByVal Target As Excel.Range)

''''''''''''''''''''''''''''''''''''''''''
'Prevents duplicate entries in Column A
''''''''''''''''''''''''''''''''''''''''''


    If Target.Cells.Count > 1 Then Exit Sub

    If Target.Column = 1 And Target <> vbNullString Then                           'Column A
        If WorksheetFunction.CountIf(Columns(1), Target) > 1 Then
            MsgBox "Entry " & Target & " already exists!", _
                vbCritical, "Dixons Travel Oslo"
            Target = ""
            Target.Select
        End If
    End If

End Sub

【问题讨论】:

  • 也许使用For 循环遍历所有单元格?

标签: excel vba


【解决方案1】:

也许你觉得这很有用:

以下代码假设您只是复制所有值,即使它们已经存在。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 1 Then
    Range("A1", Range("A1").End(xlDown)).RemoveDuplicates Columns:=1, Header:=xlNo
End If

End Sub

看起来像这样:

如果这适用于您的情况,请将 Header:=xlNo 更改为 Header:=xlYes

显然,还有其他方法。我只是觉得这很容易。

【讨论】:

    【解决方案2】:

    使用与现有方法类似的方法,您可以执行以下操作:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
        Application.EnableEvents = False
        For Each tcell In Target.Cells
            With tcell
            If .Column = 1 And .Value <> vbNullString Then     'Column A
                If WorksheetFunction.CountIf(Columns(1), .Value) > 1 Then
                    tcell.Value = ""
                End If
            End If
            End With
        Next
        Application.EnableEvents = True
    End Sub
    

    这是另一种方式 - 扩展和改进 JvdV 的想法:

    Private Sub Worksheet_Change(ByVal Target As Range)
        With Target.Parent
            If Not (Intersect(Target, .Columns(1)) Is Nothing) Then
                Range("A1", Range("A" & .Rows.Count).End(xlUp)).RemoveDuplicates Columns:=1, Header:=xlNo
            End If
        End With
    End Sub
    

    这允许粘贴多个单元格 - 无论有多少 受到影响,并且对 A 列的整个 进行重复数据删除。

    【讨论】:

    • 很好的补充@CLR
    【解决方案3】:

    你可以试试:

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    
        If Target.Column = 1 Then
            Application.EnableEvents = False
                ThisWorkbook.Worksheets("Sheet1").Columns("A:A").RemoveDuplicates Columns:=1, Header:=xlNo
            Application.EnableEvents = True
        End If
    
    End Sub
    

    注意事项:

    • 您可以更改工作表名称
    • 标题选项

    【讨论】:

    • 你离开If Target.Cells.Count = 1 Then ??
    • 是的,如果用户使用多个导致错误的单元格,我认为这是一种避免错误的方法。
    • 但是 OP 想要一个允许同时粘贴多个单元格的解决方案?
    • @CLR 你是绝对正确的,我有正确的。此外,我认为 vbNullString 检查在这种情况下没有用。
    • 完全同意。我只是在解释为什么我认为它在那里。
    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多