Excel实例下载
  VBA  应用教程
    数据库SQL知识
设为首页
提取不重复值的自定义函数
作者:bengdeng | 来源:Excel吧 | 时间:2008-12-26 | 阅读权限:游客 | 会员币:0 | 【

提取不重复数值的话题,在Excel中是一个很常见也很热门的话题,Excel吧也收集了几个关于用公式解决的几种方法:

筛选不重复值 http://www.excelba.com/Soft/Html/37.html

多列提取不重复值 http://www.excelba.com/Soft/Html/45.html

而在这里要说明的是利用Dictionary对象来解决这个问题,原来的自定义函数是在QQ群中“宇”收集的,我把它整理与加强一下,就成了现在这个函数了,完整代码如下:

Function MergerRepeat(Index As Integer, ParamArray arglist() As Variant)
'*******************************************
'时间:2008-12-26
'理整:宇 bengdeng
'功能:获得指定单元格区域或数组中的不重复集合或值
'参数说明:
'Index:整型,当值小于1时,函数返回一个集合;
'       大于1且小于不重复项的时,返回一个不重复的值
'       大于不重复项时,返回空。
'arglist():可为单元格区域或数组常量。
'发布:http://www.excelba.com
'*******************************************
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、返回A1:A10中不重复值的个数。

=COUNTA(MergerRepeat(0,A1:A10))

2、在B列从B1格开始列出A1:A10的不重复数值。

在B1格设定公式:

=MergerRepeat(ROW(),$A$1:$A$10)

并向下填充。

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

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

从上面的几个例子,大家应该可以理解MergerRepeat的用途与用法,不过对于大量的数据的话,因为循环次数的增加,MergerRepeat的效率还是不高,不过也不失为一个解决的好方法。如果大家有兴趣的话,还可以进一步改进,比如对结果排序等。不过因为感觉会进一步影响函数的效率,我这里就没有加入了。

文章录入:admin | 浏览次数:
相关评论(以下网友评论只代表其个人观点,不代表Excel吧的观点或立场)
相关信息

关于本站 | 留言本站 | 友情连接 | 后台管理
Copyright © 2005 - 2008 Excel吧 Inc. All Rights Reserved.
HxCms Ver9.0  闽ICP备06001689号
关闭此窗口