77范文网 - 专业文章范例文档资料分享平台

VBA字典用法集锦及代码详解(6)

来源:网络收集 时间:2018-12-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

常见字典用法集锦及代码详解

7、ss = a(i, 1) & a(i, 2) & a(i, 4) & a(i, 5) & a(i, 6) & a(i, 8) :把多个条件比例、位置、项目名称、大系统编号、小系统编号和相同楼层数用连接符号&连成一个字符串,然后赋给变量ss。

8、If Not d.Exists(ss) Then :If…Then结构利用了字典的Exists方法和Not来判断:如果字典d里面不存在ss表示的关键字,那么执行下面的语句。 9、n = n + 1 :把变量n增加1以后仍然赋给n。

10、d.Add ss, n :把ss的值作为关键字,n的值作为对应的项一起加入字典d中。n的值实际是关键字的位置次序,如n=1时是第一个关键字;n=2时是第二个关键字。

11、b(n, 1) = a(i, 2): b(n, 2) = a(i, 5): b(n, 3) = a(i, 6): b(n, 4) = a(i, 4) :为了使代码看起来简短一些,可以用冒号”:”把多个语句连成一行。4个语句分别给数组b的各个元素赋以对应的值。

12、b(n, 5) = a(i, 1): b(n, 6) = a(i, 8): b(n, 7) = a(i, 9) :与上述的11条相同。

13、否则执行这句:b(d(ss), 7) = b(d(ss), 7) & \& a(i, 9) :d(ss)等于关键字对应的项,在本例里等于对应的n的值。本句是把图纸长度a(i, 9)用\连起来赋给数组b,这样就得到了长度明细一栏数据。

14、For i = 1 To d.Count :在字典关键字数目中逐一循环。

15、x = Split(b(i, 7), \ :运用VBA函数Split把b(i, 7)(长度明细)按照\分割,返回一个下标从零开始的一维数组x。如果要详细了解Split函数的,可参见我的另一篇文章“常用VBA函数精选合集”。http://club.excelhome.net/thread-387253-1-1.html

16、For j = 0 To UBound(x) :在上面的x数组之间逐一循环。

17、w = w + x(j) :把变量w加x(j)数组的一个元素以后仍然赋给w。实际得到x数组的累加值。

18、b(i, 8) = b(i, 5) * b(i, 6) * w / 100: w = 0 :w求出后经过按要求计算得到的值赋给数组b的第8列元素。(数量列)另一句把变量w置0。避免在新一次的循环中误加进去。

19、[b4].Resize(n, 8) = b :最后把数组b赋给B4开始的单元格区域。

代码执行后如图实例6-1所示。

26

实例7 字典法排序

图 实例6-1示例

实例7 字典法排序

一、问题的提出:

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

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

27

常见字典用法集锦及代码详解

图 实例7-1示例

二、代码:

Private Sub CommandButton1_Click() ?by:oobird Dim d As Object, rng, i%, j%, arr Set d = CreateObject(\rng = Range(\& [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

28

实例7 字典法排序

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

三、代码详解

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

2、Set d = CreateObject(\:创建字典对象d。

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

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

6、d(CStr(rng(i, 1))) = i :把A列的股票代码的值用VBA转换函数CStr转换成字符串以后作为关键字,因为如果不作处理有时候遇到00开始的数据,可能会失去前面的0。股票代码在数组中的行位置i作为关键字对应的项,一起加入字典d。 7、For j = 3 To 5 Step 2 :前面的循环得到了整个字典,下面这两个循环用来与字典中的关键字比对而重新排位。Step 2是循环的步长,j=3执行以后,j=3+2=5,从而跳过j=4了。呵呵,这是For…Next循环结构的基础知识,说多了。

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

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

10、arr(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=1;j=5的时候j-2=3,相当于数组列的参数。把相应的股票代码赋给相同股票代码的第1列或者是第3列。 11、arr(d(CStr(rng(i, j))), j - 1) = rng(i, j + 1) :把相应的股票名称赋给相同股票代码的第2列或者是第4列。

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

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

29

常见字典用法集锦及代码详解

图 实例7-2示例

实例8 2级动态数据有效性问题

一、问题的提出:

A列是源名称,中间有空格,B列为各个源名称对应的数目不同的代号,C列是目标名称来源于源名称,要求在C列设置不重复的、没有空格的数据有效性供选择;同时D列目标代号,要求随着C列选择的目标名称的不同,提供对应的代号供选择,是为第2级数据有效性。

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

30

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库VBA字典用法集锦及代码详解(6)在线全文阅读。

VBA字典用法集锦及代码详解(6).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/380702.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: