利用Dictionary对象处理EXCEL重复值

来源:岁月联盟 编辑:zhu 时间:2008-12-30
利用Dictionary对象处理EXCEL重复值内容简介: 对于EXCEL的重复值这个问题,比较普通,OFFICEBA曾经发过一文章:让Excel 2007来筛选唯一值或删除重复值讨论过,今天再来说说利用Dictionary对象处理EXCEL重复值 先编写一个函数来达到处理EXCEL重复值的功能,然

  对于EXCEL的重复值这个问题,比较普通,OFFICEBA曾经发过一文章:让Excel 2007来筛选唯一值或删除重复值讨论过,今天再来说说利用Dictionary对象处理EXCEL重复值

  先编写一个函数来达到处理EXCEL重复值的功能,然后就应用到实例当中。

Function MergerRepeat(Index As Integer, ParamArray arglist() As Variant)
'*******************************************
'功能:获得指定单元格区域或数组中的不重复集合或值
'参数说明:
'Index:整型,当值小于1时,函数返回一个集合;
'    大于1且小于不重复项的时,返回一个不重复的值
'    大于不重复项时,返回空。
'arglist():可为单元格区域或数组常量。
'发布:http://www.officeba.com.cn
'*******************************************
Dim NotRepeat As Object, tStr As String
Set NotRepeat = CreateObject("Scripting.Dictionary")
For Each arg In arglist
  For Each rRan In arg
    If TypeName(rRan) = "Range" Then
      If rRan.Value <> "" Then NotRepeat(rRan.Value) = 0
    Else
      NotRepeat(rRan) = 0
    End If
  Next
Next
If Index < 1 Then
  MergerRepeat = NotRepeat.keys
ElseIf Index <= NotRepeat.Count Then
  arr = NotRepeat.keys
  MergerRepeat = arr(Index - 1)
Else
  MergerRepeat = ""
End If
End Function

  下面用几个应用的实例,来说明该函数的应用。

  1、利用此函数能返回某区域中不重复值的数量,以B1:B10为例

  在单元格中输入公式:=COUNTA(MergerRepeat(0,B1:B10))

  回车即有

  2、利用此函数返回不同单元格不重复值比较

  例如在C列从C1格开始列出B1:B10的不重复数值。

  在C1格中输入公式:=MergerRepeat(ROW(),$A$1:$A$10)

  并向下填充。

  3、求多个区域(可以不连续)加数组的不重复个数。

  =COUNTA(MergerRepeat(0,A1:A6,{"abc","Excel吧",1,"excelba.com"},C2:C6))

  虽然此函数对于处理大量数据来说效率不高,但还算很不错了。大家可以在此基础上编写更加完善的函数进行完善别忘了和大家分享哦

图片内容