现学现用,用字典对象构造一个排名次函数 Public Function 排名次(ByVal 数值 As Range, ByVal 比较区域 As Range) As Integer '此函数返回的是一个整数 Static 临时集合 As Dictionary '声明一个字典对象,用来临时存储所选区域中的非重复值 Static strText As String '声明一个静态变量,用于记住所选区域中的值 Static sz() As Double '声明一个空数组,用来装载排序后的区域值 Dim r As Variant '声明一个名叫r的变量,用来表示比较区域中的一个元素 Dim i As Integer '计数器 Application.Volatile False '将此函数标记为非易失性函数 If strText <> Join(Application.WorksheetFunction.Transpose(比较区域), ",") Then '如果从没有为对象赋过值或区域已改变或增加了新值或其中的值被改变 strText = Join(Application.WorksheetFunction.Transpose(比较区域), ",") '重新为strtext赋值 Set 临时集合 = CreateObject("Scripting.dictionary") '创建对象 For Each r In 比较区域 If Not 临时集合.Exists(Val(r.Text)) Then 临时集合.Add Key:=Val(r.Text), Item:="" Next ReDim sz(临时集合.Count) For i = 1 To 临时集合.Count sz(i) = Application.WorksheetFunction.Large(临时集合.Keys, i) '创建一个数组用来装载排序后的值,不循环不行,可以不用此方法吗? Next End If 排名次 = Application.WorksheetFunction.match(Val(数值.Text), sz, 0) End Function
[此贴子已经被作者于2008-6-30 14:09:51编辑过] |