Excel vba如何使用宏实现:判断A列数据是否重复,如果重复,在B列显示重复,如果不重复,则在

Excelvba如何使用宏实现:判断A列数据是否重复,如果重复,在B列显示重复,如果不重复,则在B列显示唯一?... Excel vba如何使用宏实现:判断A列数据是否重复,如果重复,在B列显示重复,如果不重复,则在B列显示唯一? 展开
 我来答
百无生
2015-03-05 · TA获得超过2214个赞
知道大有可为答主
回答量:2150
采纳率:80%
帮助的人:645万
展开全部
如果用代码:
Dim myBoo As Boolean
myBoo = True
Dim I As Long, C As Long
C = Application.WorksheetFunction.CountA(Range("A:A"))
For I = 1 To C
If Range("B" & I).Value <> Application.WorksheetFunction.VLookup(Range("A" & I).Value, Range("A:B"), 2, 0) Then myBoo = False: Exit For
Next
If myBoo Then
MsgBox "正常"
Else
MsgBox "异常"
End If
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
莫道枉然
推荐于2016-02-17 · 超过25用户采纳过TA的回答
知道答主
回答量:53
采纳率:14%
帮助的人:32.1万
展开全部
Sub test()
    Dim arr, brr()
    Dim I As Integer, j As Integer
    Dim Dict As Object

    On Error Resume Next
    Set Dict = CreateObject("scripting.dictionary")
    With ActiveSheet
        arr = Intersect(.UsedRange, .Columns(1))

        For I = 1 To UBound(arr)
            If Dict.exists(arr(I, 1)) Then
                Dict.Item(arr(I, 1)) = Dict.Item(arr(I, 1)) + 1
            Else
                Dict.Item(arr(I, 1)) = 1
            End If
        Next I

        For I = 1 To UBound(arr)
            j = j + 1
            ReDim Preserve brr(1 To j)
            brr(j) = IIf(Dict.Item(arr(I, 1)) = 1, "唯一", "重复")

        Next I
        .Columns(2).ClearContents
        .Range("b1").Resize(UBound(brr), 1) = WorksheetFunction.Transpose(brr)
    End With
  
End Sub
更多追问追答
追问
语句好长,数据量8万左右,运行会不会慢?
追答
Sub test()
    Application.ScreenUpdating = False
    Dim arr, brr()
    Dim i As Long, j As Long
    Dim Dict As Object
    On Error Resume Next

    Set Dict = CreateObject("scripting.dictionary")

    With ActiveSheet
        arr = Intersect(.UsedRange, .Columns(1))
        ReDim brr(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr)
            If Dict.exists(arr(i, 1)) Then
                Dict.Item(arr(i, 1)) = Dict.Item(arr(i, 1)) + 1
            Else
                Dict.Item(arr(i, 1)) = 1
            End If
        Next i

        For i = 1 To UBound(arr)
            j = j + 1
            brr(j, 1) = IIf(Dict.Item(arr(i, 1)) = 1, "唯一", "重复")

        Next i
        .Columns(2).ClearContents
        .Range("b1").Resize(UBound(brr), 1) = brr
    End With
    Application.ScreenUpdating = True
End Sub

我电脑运行了1.3秒

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
淡红
2015-03-05 · 超过82用户采纳过TA的回答
知道小有建树答主
回答量:255
采纳率:0%
帮助的人:116万
展开全部
一定要在B列显示么? excel有一个功能叫显示重复值。
我的excel是2013版本,全选A列,然后选开始->条件格式->突出显示单元格规则->重复值。重复值会表红。
追问
嗯,需要反馈结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可爱就是笑
2015-03-05 · TA获得超过1599个赞
知道大有可为答主
回答量:4011
采纳率:70%
帮助的人:622万
展开全部
取不重复值,VBA中通常都是使用字典法
追问
咋做?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式