关于字典的一篇转载

程序目的:利用字典实现将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

一点按钮,它奶奶的还真出来了,二天功夫,没有白费,从此能看懂很多程序代码了,谢谢曾经帮助过我的每一位大师,是你们带我入门,让今天的终于看懂了很多程序代码,谢谢

菊子曰 今天你菊子曰了么?
posted @ 2010-03-21 12:11  surfacetension  阅读(322)  评论(0编辑  收藏  举报