【问题标题】:Prevent duplicate entries by column按列防止重复条目
【发布时间】:2015-11-29 21:27:52
【问题描述】:

在 Excel 中,有没有办法(非 VBA)让某些列不接受条目,如果它们在该特定列的其他地方重复(不是所有列,例如列 B)

在下面的数据中,EMP_ID 324 的第二个条目是不允许的

Region     EMP_ID   Salary  Yrs_Experience
Chicago     324    $165,140     10
Chicago     234    $162,692     12
NY           56    $122,451     10
NY          567     $98,567     7
SF          344    $116,735     8
SF          324 

【问题讨论】:

  • Excel 不是数据库!数据库表有主键,Excel 没有。

标签: validation excel excel-formula countif vba


【解决方案1】:

可以通过数据验证来实现。假设Region在A1中,选择ColumnB,DATA > Data Tools > Data Validation - Data Validation...,允许:自定义,公式:

  =COUNTIF(B:B,B1)=1  

好的。

【讨论】:

    【解决方案2】:

    使用Worksheet_Change 事件宏来管理输入。如果发现重复项,则反转操作并将用户发送回有问题的单元格以获取更正的值。

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Target, Columns(2)) Is Nothing Then  '<~~something happened in column B
            On Error GoTo bm_Safe_Exit
            Application.EnableEvents = False
            Dim dupe As Range
            For Each dupe In Intersect(Target, Columns(2).SpecialCells(xlCellTypeConstants))
                If Application.CountIf(Columns(2), dupe.Value2) > 1 Then
                    Application.Undo
                    dupe.Activate
                    Exit For
                End If
            Next dupe
        End If
    bm_Safe_Exit:
        Application.EnableEvents = True
    End Sub
    

    这应该处理复制并粘贴到 B 列,只要粘贴的值不会创建重复项。我已将检查的单元格缩小到输入的值(又名xlCellTypeConstants),但也可以抛出更宽的网络。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2012-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多