VBA数组与字典解决方案第59讲字典的键

北京权威青春痘医院 http://m.39.net/news/a_9323322.html

大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第59讲内容:利用工作表函数,对字典的键值按大小排序,并给出对应的键.

在字典和数组中,是不能如工作表中那样进行直接排序的,需要借助于函数来进行.我在上一讲中讲了利用工作表函数large进行排序的方法,今日我们讲解利用MAX排序,已经利用match定位的方法.关于这些函数,在本书中不做重点的讲解,只是利用,如果不清楚,可以参考我的其他书籍资料,或者到网上搜索相关的资料参考。

实例,如下面截图数据,在A列中有若干数据,我们要对齐排重处理,同时要统计出每个数据的出现次数,最后按出现的次数进行多少排序:

思路,和上一讲大体一致,我们要把这些数据首先装到字典中,在装的同时要计算每个数字出现的次数,然后对出现的次数建立循环,每次取出最大值,并根据最大值的位置求出对应的键,当每次取出最大值后要把这个最大值变成空,以便下次取还是最大值。下面看我给出的代码:

Submynzsz_59()第59讲利用工作表函数,对字典的键值按大小排序,并给出对应的键

Dimran

Sheets(59).Select

Setmydic=CreateObject(Scripting.Dictionary)字典

TT=Cells(Rows.Count,1).End(xlUp).Row

ForEachranInSheets(59).Range(a2:aCells(Rows.Count,1).End(xlUp).Row)

Ifran.ValueThen

IfNotmydic.exists(ran.Value)Then

mydic.Addran.Value,1需要注意此处要加VALUE

Else

mydic(ran.Value)=mydic(ran.Value)+1

EndIf

EndIf

Next

注意此处把字典的键和键值取出

k=mydic.keys:T=mydic.items

建立数组,用于存放目标数据

ReDimX(1Tomydic.Count,1To2)

Fori=1Tomydic.Count

X(i,2)=Application.Max(T)

找到键的位置

W=Application.Match(X(i,2),T,0)-1

提取键

X(i,1)=k(W)

相应的键值变成空,以用MAX函数

T(W)=

Next

[e:f].Clear

[E1]=排序:[f1]=重复次数

Sheets(59).[E2].Resize(mydic.Count,2)=X

EndSub

代码截图:

代码解析:

1上述代码实现了:这些数据首先装到字典mydic中,在装的同时要计算每个数字出现的次数,放到键值中,然后提取出见和键值放到数组中k=mydic.keys:T=mydic.items

在键值中建立循环,利用MAX函数每次取出最大值,并根据最大值的位置W=Application.Match(X(i,2),T,0)-1求出对应的键,当每次取出最大值后要把这个最大值变成空,以便下次取的还是最大值有效.最后回填数据。

2Setmydic=CreateObject(Scripting.Dictionary)字典

上述语句创建字典

3ForEachranInSheets(59).Range(a2:aCells(Rows.Count,1).End(xlUp).Row)

Ifran.ValueThen

IfNotmydic.exists(ran.Value)Then

mydic.Addran.Value,1需要注意此处要加VALUE

Else

mydic(ran.Value)=mydic(ran.Value)+1

EndIf

EndIf

Next

上述语句将数值放到字典中,需要注意的是一定要用ran.Value,此处读者可以自己测试一下,如果不加value有什么不同,通过测试理解一下字典见和键值的意义。

4注意此处把字典的键和键值取出

k=mydic.keys:T=mydic.items

上述语句提取出键和键值到数组中

5Fori=1Tomydic.Count

X(i,2)=Application.Max(T)

找到键的位置

W=Application.Match(X(i,2),T,0)-1

提取键

X(i,1)=k(W)

相应的键值变成空,以用MAX函数

T(W)=

Next

在上述语句中利用建立了一个循环,在每次循环中取max值,取出后将数值变成空。同时用W=Application.Match(X(i,2),T,0)–1函数找到键的位置.

6[e:f].Clear

[E1]=排序:[f1]=重复次数

Sheets(59).[E2].Resize(mydic.Count,2)=X

EndSub

上述语句回填数据.

下面看运行的截图:

今日内容回向:

1如何利用MAX和MATCH进行排序?

2上述在给字典赋值时不用VALUE是否可以?



转载请注明地址:http://www.shiquanren.net/hzzz/hzzz/27129.html


  • 上一篇文章:
  • 下一篇文章: 没有了
  • 公司简介 广告合作 发布优势 服务条款 隐私保护 网站地图 版权声明