关于字典的一篇转载
程序目的:利用字典实现将1至10填入指定单元格
Sub 显示10()
Dim arr
Dim dic As Object, i As Long, s As String
Set dic = CreateObject("Scripting.Dictionary") '创建字典
For i = 1 To 10
dic.Add i, " " '将数字写入字典
Next
s = Join(dic.keys, " ")
Debug.Print s
arr = Split(s, " ") '锯一锯
arr = WorksheetFunction.Transpose(arr) '转一转
[b10:b19] = arr
Set dic = Nothing
End Sub
关于其中语句及函数的解释:
Join函数:
描述
返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。
语法
Join(sourcearray[, delimiter])
Join函数语法有如下命名参数:
部分
描述
sourcearray
必需的。包含被连接子字符串的一维数组。
delimiter
可选的。在返回字符串中用于分隔子字符串的字符。如果忽略该项,则使用空格(" ")来分隔子字符串。如果delimiter是零长度字符串(""),则列表中的所有项目都连接在一起,中间没有分隔符。
Split函数
描述
返回一个下标从零开始的一维数组,它包含指定数目的子字符串。
语法
Split(expression[, delimiter[, limit[, compare]]])
Split函数语法有如下命名参数:
部分
描述
expression
必需的。包含子字符串和分隔符的字符串表达式 。如果expression是一个长度为零的字符串(""),Split则返回一个空数组,即没有元素和数据的数组。
delimiter
可选的。用于标识子字符串边界的字符串字符。如果忽略,则使用空格字符(" ")作为分隔符。如果delimiter是一个长度为零的字符串,则返回的数组仅包含一个元素,即完整的 expression字符串。
limit
可选的。要返回的子字符串数,–1表示返回所有的子字符串。
compare
可选的。数字值,表示判别子字符串时使用的比较方式。关于其值,请参阅“设置值”部分。
设置值
compare参数的设置值如下:
常数
值
描述
vbUseCompareOption
–1
用Option Compare语句中的设置值执行比较。
vbBinaryCompare
0
执行二进制比较。
vbTextCompare
1
执行文字比较。
vbDatabaseCompare
2
仅用于Microsoft Access。基于您的数据库的信息执行比较。
附关于此位仁兄关于arr函数等的解释:
我用土办法理解 arr、split、Transpose 、dic.add
一段时间来热心的高手帮我写了很多程序,可是很多都看不懂代码的含义,当然主要就是arr、split、Transpose 、dic.add等,左看右看,我采取了形象比喻的方法终于明白了arr、split、Transpose 、dic.add。
1、 arr
我把arr比喻成一个大麻袋,麻袋所装的东西就是元素了,东西按种类分就形成了数组的维,把它用在数字复制上,还真灵。
例如:将表1的[a1:d1]数字复制到表1的[a1:d1]
首先将Sheet1.[a1:d1]打包,然后放进麻袋arr,得到arr = Sheet1.[a1:d1]
将麻袋arr背到表2,倒出元数Sheet1.[a1:d1],得到Sheet2.[a1:d1] = arr
一点按钮,成功了
Sub 复制()
arr = Sheet1.[a1:d1]
Sheet2.[a1:d1] = arr
End Sub
2、 split
我把split比喻成一把锯子,往哪锯,当然要找接口的地方。
例如:字符串 s=2,3,4,5,6,7,8 它的接口在什么地方,一看就知道各数字间是用豆号连起来的,对它就是接口“锯”,即 “,” 锯点,要把这些数字分开就是 split(s,”,”),这个公式按书面:这要、哪可不要 、那要、这可不要太抽象了
3、 Transpose我把Transpose比喻成体操向左转、向右转,还真灵
例如:将表1的[a1:a5]数字复制到表2的[g11:k11]
首先将Sheet1.[a1:a5]打包,然后放进麻袋arr,得到arr = Sheet1.[a1:a5]
由于Sheet1.[a1:a5]是纵向而Sheet2.[g11:k11]横向,那么Sheet1.[a1:a5]就来个向左转,当然是借助工具Transpose,把麻包arr放进Transpose去而得到:arr = WorksheetFunction.Transpose(arr);将向左转的arr倒到Sheet2.[g11:k11]中去,得到Sheet2.[g11:k11] = arr,一点按钮,成功了
Sub复制()
arr = Sheet1.[a1:a5]
arr = WorksheetFunction.Transpose(arr)
Sheet2.[g11:k11] = arr
End Sub
4、 dic.add
dic我把它比作空笔记本,add那就是一只笔了,用笔在空笔记本写上字不就有字可查了吗,对就是字典
例如:将数字1到10写进空笔记本就用add,
。。。
For i = 1 To 10
For i = 1 To 10
dic.Add i, " "
Next
。。。
我用我用土办法这样理解 arr、split、Transpose 、dic.add 后就写了一个:将数字1到10分别填入单元格:b10:b19 的程序, 下面就是我写的东西,请指正,谢谢
Sub 显示10()
Dim arr
Dim dic As Object, i As Long, s As String
Set dic = CreateObject("Scripting.Dictionary") ‘创建字典
For i = 1 To 10
dic.Add i, " " ‘将数字写入字典
Next
s = Join(dic.keys, " ")
arr = Split(s, " ") ‘锯一锯
arr = WorksheetFunction.Transpose(arr) ‘转一转
[b10:b19] = arr
Set dic = Nothing
End Sub
一点按钮,它奶奶的还真出来了,二天功夫,没有白费,从此能看懂很多程序代码了,谢谢曾经帮助过我的每一位大师,是你们带我入门,让今天的终于看懂了很多程序代码,谢谢