输入重复值时提示

重复提示
平时在输入大量数据时,在同一列中自上往下输入,一不注意可能会输入重复项。
有没方案能提示输入重复呢?
有2种方案:一个是函数countif在数据有效性中定义,另一个是VBA代码。
先来写写函数方法:
比如我们是在B列中输入数据的那范围就是B1~B65536,在数据有效性中使用自定义,在公式中输入:=COUNTIF($B$1:$B$65536,B1)=1,随之向下填充,当输入重复值会提示,并清空当前输入值。
VBA代码:
 
  1. Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)   
  2.   Dim msg As VbMsgBoxResult   
  3.   On Error GoTo err  ‘当有错误时结束程序   
  4.   If Target(1).Column = 2 Then ‘如果是第二列   
  5.       If WorksheetFunction.CountIf(Intersect(ActiveSheet.UsedRange, Target(1).EntireColumn), Target(1).Value) > 1 Then   
  6.         ‘询问用户是否保留重复值   
  7.       msg = MsgBox("出现重复数据:  " & Target(1).Value & vbCrLf & vbCrLf & "本列与此数据重复次数: " & WorksheetFunction.CountIf(Intersect(ActiveSheet.UsedRange, Target(1).EntireColumn), Target(1).Value) – 1 & vbCrLf & "想保留请选“是(Y)”,否则选“否(N)”。", vbYesNo + vbOKOnly, "提示")   
  8.       If msg = vbNo Then  ‘如果不保留   
  9.         Application.EnableEvents = False    
  10.         Target.Value = ""  ‘清空数据   
  11.         Application.EnableEvents = True  ‘恢复   
  12.       Else: If msg = vbYes Then Exit Sub  ‘如果选择保留则直接退出程序   
  13.       End If   
  14.     End If   
  15.   End If   
  16. err:   
  17. End Sub  
从这两种方法来看,第一种适合大众化,第二种适合有特殊需求的,如可以询问保留重复数据。
大家有需要选使用吧!
分享到:

8 条评论

点击这里取消回复。
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

昵称
  1. 卸妆油

    第一种就够用了

  2. 天驿古茗

    看不懂啊

    1. Kael.Z

      慢慢懂….

  3. 安静

    呃 昨天刚看了 什么 MBO 获得了 excel冠军 这边就出了 excelvba …太跟得上潮流了~

    1. Kael.Z

      呵呵,多多关注

  4. zkblog

    学习了、

  5. 麻雀吧

    学习了第一种,哈哈,谢谢分享

    1. Kael.Z

      呵呵,第一种简单~