打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel 常见字典用法集锦及代码详解8

实例7  字典法排序

一、问题的提出

AB列是按顺序排列的全部股票代码和股票名称,CD列和EF列是另外按条件筛选出来的无序的数据,
   
要求编写一段代码,将它们排列到与A列相同的股票行里面。

 

 

代码执行前如图实例7-1所示。


    
实例7-1示例

 

 

二、代码

Private Sub CommandButton1_Click()  ‘by:oobird

Dim d As Object, rng, i%, j%, arr

Set d = CreateObject("Scripting.Dictionary")

rng = Range("a3:f" & [a65536].End(xlUp).Row)

ReDim arr(1 To UBound(rng), 1 To 4)

For i = 1 To UBound(rng)   

d(CStr(rng(i, 1))) = i

Next i

For j = 3 To 5 Step 2

For i = 1 To Cells(65536, j).End(xlUp).Row - 2

If d(CStr(rng(i, j))) <> "" Then

arr(d(CStr(rng(i, j))), j - 2) = rng(i, j)     

arr(d(CStr(rng(i, j))), j - 1) = rng(i, j + 1)

End If

Next i

Next j

[c3].Resize(UBound(rng), 4) = arr

End Sub
      

三、代码详解

1Dim d As Object, rng, i%, j%, arr
    
:声明各个变量。

2Set d = CreateObject("Scripting.Dictionary") :创建字典对象d

3rng = Range("a3:f" & [a65536].End(xlUp).Row)  :把A列到F列的单元格区域的值赋给变量rng

4ReDim arr(1 To UBound(rng), 1 To 4) :根据数组rng的大小重新声明动态数组变量的大小,这里是按最大数量来声明,可避免因声明得小了而导致代码出错。

5For i = 1 To UBound(rng)
    
:在rng数组中逐一循环。

6d(CStr(rng(i, 1))) = i
    
:把A列的股票代码的值用VBA转换函数CStr转换成字符串以后作为关键字,因为如果不作处理有时候遇到00开始的数据,可能会失去前面的0。股票代码在数组中的行位置i作为关键字对应的项,一起加入字典d

7For j = 3 To 5 Step 2
    
:前面的循环得到了整个字典,下面这两个循环用来与字典中的关键字比对而重新排位。Step 2是循环的步长,j=3执行以后,j=3+2=5,从而跳过j=4了。呵呵,这是For…Next循环结构的基础知识,说多了。

8For i = 1 To Cells(65536, j).End(xlUp).Row – 2 :因为C列和E列的最后一个非空单元格的位置不一样,所以用了Cells(65536, j).End(xlUp).Row在循环中分别得到这两列的最后一个非空单元格的行数,由于数组rng是从第3行开始的,为了与下面引用的rng数组对应,所以需要减去2。全句是在C列和E列中逐一循环。

9If d(CStr(rng(i, j))) <> "" Then
    
rng(i, j)C列或者E列的股票代码,本句是如果这个股票代码关键字对应的项不等于空的时候,执行下面的代码。

10arr(d(CStr(rng(i, j))), j - 2) = rng(i, j)
    
d(CStr(rng(i, j)))=i见上述6的解释,表示数组arr的第1维,相当于行;j-2是随着j=3的时候,j-2=1j=5的时候j-2=3,相当于数组列的参数。把相应的股票代码赋给相同股票代码的第1列或者是第3列。

11arr(d(CStr(rng(i, j))), j - 1) = rng(i, j + 1)
    
:把相应的股票名称赋给相同股票代码的第2列或者是第4列。

12[c3].Resize(UBound(rng), 4) = arr
    
:把数组arr赋给C3开始的单元格区域。

 

 

代码执行后如图实例7-2所示。


    
实例7-2示例

r6CS3eCC.rar (75.34 KB, 下载次数: 119)
在17楼有实例8  继续

[此贴子已经被作者于2010-10-23 21:39:56编辑过]

UBMvjX6V.rar

2010-10-23 21:35:00 上传

下载次数: 103

765.48 KB, 下载次数: 103

实例7

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA常用小代码304:一个字典实现条件求和和计数功能
来自【Excel完美论坛】
常见字典用法集锦及代码详解5
3段VBA代码,从此不再「复制-粘贴」
Excel VBA小程序
Excel VBA 7.25 针对某个工作表某列数据进行汇总!那么多要求?确定不是为难我嘛?
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服