VBA: 字典的介绍与实例

基本语句

Sub dictest()

' 字典简介
' 字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)联合组成
' VBA字典有6个方法Add , Keys, Items, Exists, Remove, RemoveAll
' VBA字典有4个属性Count , Key, Item, CompareMode


' 创建字典"d"
Dim d As Object
Set d = CreateObject("Scripting.Dictionary")

' 添加
d.Add "a", "example1"
d.Add "b", 9
'd.Add "b", 7 'add重复key会报错
d("b") = 7    '这样会直接覆盖,不会报错
'd.Item("b") = 7 '与上者相同
d("c") = "example2"

'通常使用Sting文本字符串作为字典key关键词,也可以使用数字、数值作为key
'速度:纯数字>纯文本字符>>>文本/数值混合型

' 输出
Cells(1, 1) = d("a")
'Cells(1, 1) = d.Item("a") '与上者相同
Cells(1, 2) = d("b")
Cells(1, 3) = d("c")

' 字典成员个数
Cells(1, 4) = d.Count

'移除
d.Remove ("b")
'd.RemoveAll  '移除所有

' key是否存在
Cells(2, 1) = d.Exists("b")
d.Add "b", 7
Cells(2, 2) = d.Exists("b")

' 替换key
d.Key("a") = "e"

'所有key所在的数组和所有item所在的数组
d_keys = d.Keys
Cells(3, 1) = d_keys(0)
Cells(3, 2) = d_keys(1)
d_items = d.Items
Cells(4, 1) = d_items(0)
Cells(4, 2) = d_items(1)

'更改字符串关键字比较时所使用的比较模式
'd.CompareMode = 0(二进制)/1(文本)/2(数据库)

End Sub

结果如下
字典1

实例

'获取不重复的name和每个name的income总计

Sub dictest1()

Dim data_count As Long
data_count = 188

Dim data_name, data_income, i

data_name = Application.Transpose(Worksheets("数据").Cells(2, 1).Resize(data_count, 1))
data_income = Application.Transpose(Worksheets("数据").Cells(2, 2).Resize(data_count, 1))

Dim d1 As Object
Set d1 = CreateObject("Scripting.Dictionary")

For i = 1 To data_count
    If d1.exists(data_name(i)) Then
        d1.Item(data_name(i)) = d1.Item(data_name(i)) + data_income(i)
    Else
        d1.Item(data_name(i)) = data_income(i)
    End If
Next

d1_keys = d1.keys
d1_items = d1.items
Worksheets("结果").Cells(2, 1).Resize(UBound(d1_keys) + 1, 1) = Application.Transpose(d1_keys)
Worksheets("结果").Cells(2, 2).Resize(UBound(d1_items) + 1, 1) = Application.Transpose(d1_items)

End Sub

字典2
字典3

  • 21
    点赞
  • 138
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值