excel中需要做重复check,运用WorksheetFunction.CountIf不能很好的返回结果
例:excel数据
    A
1  001
2  002
3  1代码:
    If (WorksheetFunction.CountIf(Range("A1:A3"), "001") > 1) Then
        MsgBox ("NG")
    Else
        MsgBox ("OK")
    End If
想要的结果是"OK",但因为不区分"001"和"1"所以得到的结果是"NG"。求各位大仙指点

解决方案 »

  1.   

    Sub test()
    For Each c In Range("a1:a3")
        If VBA.Left(c, 1) <> 0 Then m = m + 1
    Next c
    If m > 1 Then
        MsgBox "NG"
        Else: MsgBox "ok"
    End If
    End Sub
      

  2.   

    msgbox evaluate("sumproduct((a1:a3=""001"")*a1:a3)")
      

  3.   

    引出这个问题是因为改一个现存程序的bug。本来程序中是有一段来做LoginID的重复check,因为大部分的LoginID都是字母,所以没什么问题,用的就是CountIf函数。但现在出来这个bug,所以就想在不是大改程序的前提下,能不能解决这个bug。
    当然如果简单的countif解决不了的话,也就只能是自己另写函数想办法了
      

  4.   

    Counif会先将文本型的数值转化为数字后再进行比较,这带来了两个风险:
    1.文本型的数值和数字混用的时候,用Conutif来计算的话,它不会将两者进行区分,即0012和12它认为是一样的;
    2.对于长度超过15位的文本型的数值,只要前15位是相同的,Countif就认为它们是相同的。原因还是因为它先将文本型的数值转化为数字后再进行比较,转化为数字后因为excel的精度为15位,超过的位数将视作为0,所以下面两个数字:1234567890123451和1234567890123452对excel来讲都是一样的。
    解决的办法就是用Sumproduct。