第三章 字典
3.3 字典的属性
字典一共有四个属性,分别是:Key、Item、Count、CompareMode
3.3.1 Key
更改字典中已有的键
d.key(key)=newkey
例如:
Sub 字典()
Dim d As New Dictionary
d.Add '新加字典', '第一个'
d.Add '字典2', '第二个'
d.Add '字典3', '第三个'
d.Key('字典3') = '修改后字典3'
End Sub
修改后如下图所示:
3.3.2 Item
用于写入或读取字典中指定键的条目,如果指定的键不存在,则会新增。
d.Item(key)[=newitem]
也可以简写为:d(key)[=newitem]
例句:
d.Item('字典3') = '修改后第三个'
d('字典3') = '修改后第三个'
把'字典3'对应的条目进行修改。如果'字典3'这个键值现在在字典里不存在,则会新增'字典3'键值和条目'修改后第三个',如果存在则修改条目。
通常在对字典写入关键字时,都会用到字典的这个简化版属性,代码既简洁,又减少出错的机率。与数组搭配更是相得益彰:
A公司 |
B公司 |
C公司 |
D公司 |
D公司 |
D公司 |
把上面表格里的内容写到字典里。
Sub 写入字典()
Dim d As New Dictionary
arr = Range('a1').CurrentRegion
arr = Application.Transpose(arr)
For i = 1 To UBound(arr)
d(arr(i)) = ''
Next
End Sub
通过一个循环就把数组里的内容写入到字典里了,而且自动去掉了重复项。生成的字典是这样的:
3.3.3 Count
统计字典中关键字的个数
d.count
象上图所示,这个字典的关键字个数就是4。
3.3.4 CompareMode
写入字典的关键字是否区分大小写
d.CompareMode[=compare]
0 区分大小写(默认)
1 不区分大小写
d.CompareMode = 0
小程序:
我们利用字典的Item属性简写语句d(key)=newitem,如果指定的键不存在,则会新增,如果存在则修改条目的特征,做一个随机抽取名单的小程序。
从供应商库名单里随机抽取供应商,写到供应商抽取表里。
A公司 | ||
B公司 | ||
C公司 | ||
D公司 | ||
E公司 | ||
F公司 | ||
G公司 | ||
H公司 | ||
I公司 | ||
J公司 | ||
K公司 | ||
L公司 | ||
M公司 | ||
N公司 | ||
O公司 | ||
**项目项目供应商随机抽取表 | ||
序号 | 供应商名称 | |
1 | ||
2 | ||
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | ||
9 | ||
10 | ||
11 | ||
12 | ||
13 | ||
14 | ||
15 |
Sub 字典随机抽取名单()
On Error Resume Next
Range('c3:c17').ClearContents
Set d = CreateObject('scripting.dictionary')
arr = Sheets('供应商库').Range('a1').CurrentRegion
arr = Application.Transpose(arr)
For i = 1 To UBound(arr)
d(arr(i)) = ''
Next
n = InputBox('请输入抽取个数')
If n = '' Then MsgBox '未输入抽取个数': Exit Sub
n = n * 1
If n > d.Count Then MsgBox '抽取个数过多': Exit Sub
If n <= 0 Then MsgBox '开玩笑吧你': Exit Sub
For i = 1 To n
t = Application.RandBetween(1, d.Count)
k = Application.Index(d.keys, t)
Cells(Rows.Count, 3).End(xlUp).Offset(1, 0) = k
d.Remove (k)
Next
End Sub
先把供应商表里的内容通过数组写到字典里,然后用RandBetween函数生成一个从1到d.Count的随机数t,用Application.Index(d.keys, t)语句读取随机数t对应的字典里的关键字,把它写到供应商名称下的单元格里,再删除掉这个关键字。循环往复,就会抽取出你需要的供应商名单了。
联系客服