平时在输入大量数据时,在同一列中自上往下输入,一不注意可能会输入重复项。
有2种方案:一个是函数countif在数据有效性中定义,另一个是VBA宏代码。
先来写写函数方法:
比如我们是在B列中输入数据的那范围就是B1~B65536,在数据有效性中使用自定义,在公式中输入:=COUNTIF($B$1:$B$65536,B1)=1,随之向下填充,当输入重复值会提示,并清空当前输入值。
VBA代码:
- Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
- Dim msg As VbMsgBoxResult
- On Error GoTo err ‘当有错误时结束程序
- If Target(1).Column = 2 Then ‘如果是第二列
- If WorksheetFunction.CountIf(Intersect(ActiveSheet.UsedRange, Target(1).EntireColumn), Target(1).Value) > 1 Then
- ‘询问用户是否保留重复值
- msg = MsgBox("出现重复数据: " & Target(1).Value & vbCrLf & vbCrLf & "本列与此数据重复次数: " & WorksheetFunction.CountIf(Intersect(ActiveSheet.UsedRange, Target(1).EntireColumn), Target(1).Value) – 1 & vbCrLf & "想保留请选“是(Y)”,否则选“否(N)”。", vbYesNo + vbOKOnly, "提示")
- If msg = vbNo Then ‘如果不保留
- Application.EnableEvents = False
- Target.Value = "" ‘清空数据
- Application.EnableEvents = True ‘恢复
- Else: If msg = vbYes Then Exit Sub ‘如果选择保留则直接退出程序
- End If
- End If
- End If
- err:
- End Sub
从这两种方法来看,第一种适合大众化,第二种适合有特殊需求的,如可以询问保留重复数据。
大家有需要选使用吧!
第一种就够用了
看不懂啊
慢慢懂….
呃 昨天刚看了 什么 MBO 获得了 excel冠军 这边就出了 excelvba …太跟得上潮流了~
呵呵,多多关注
学习了、
学习了第一种,哈哈,谢谢分享
呵呵,第一种简单~