防止多列中的重复条目

时间:2018-01-25 07:19:35

标签: excel vba excel-vba

我目前正在使用此宏来阻止用户在电子表格中输入类似的条目。这在单个列中工作正常。

但是如何在多列中添加相似内容(如A列,D列和F列)。每列仅允许唯一的记录。请帮帮我

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Column <> 1 Or .Cells.Count > 1 Then Exit Sub
        If WorksheetFunction.CountIf(Columns(.Column), .Value) > 1 Then
            Application.DisplayAlerts = False
            .ClearContents
            Application.DisplayAlerts = True
            MsgBox "Record no. already exists!"
        End If
    End With
End Sub

2 个答案:

答案 0 :(得分:1)

只需更改原始代码中的if语句并允许其他列

,即可将此代码应用于其他列
If (.Column <> 1 And .Column <> 4) Or .Cells.Count > 1 Then Exit Sub 

可以使用其他And语句和.Column <> xxx

添加更多列
If (.Column <> 1 And .Column <> 4 And .Column <> 6) Or .Cells.Count > 1 Then Exit Sub 

答案 1 :(得分:0)

我在if中修改了你的代码,并在普通模块中放入了单独的程序:

Sub ClearCont(cl As Range)
    Application.EnableEvents = False
    cl.ClearContents
    Application.EnableEvents = True
    MsgBox "Record no. already exists!"
    'cl.Select
End Sub

然后,工作表下的代码应该是这样的:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    Dim col As Range

    With Target.Parent
        Set rng = Union(.Columns(1), .Columns(4), .Columns(6))
    End With


    With Target
        For Each col In rng.Columns
            If WorksheetFunction.CountIf(col, .Value) > 0 And col.Column <> .Column Then
                ClearCont Target
            ElseIf WorksheetFunction.CountIf(col, .Value) > 1 Then
                ClearCont Target
            End If
        Next col
    End With
End Sub

表达式

Set rng = Union(.Columns(1), Columns(4), Columns(6))

选择A,D和F列,您可以修改它以添加更多列。

编辑:正如Peh的建议,我已将ActiveSheet更改为Target.Parent。我还在cl.Select子例程中取消了ClearCont。我认为如果在工作表中直接手动输入值,这行代码将非常有用 - 用户将返回到被询问的单元格。但是,如果按表单输入值,您可能会将其留下注释或删除它。