分享

(19)字典Dictionary

 时间剧毒 2015-02-09

'''------字典Dictionary  是微软Windows脚本语言中的一个很有用的对象
'字典的特点 :
'key 唯一  好比每个字
'key 与 item相互对应关系   Item 解释
''字典不是VBA自带的 需要调用
''调用方法1 :引用法(前期绑定)  工具-引用-浏览-找到scrrun.dll-确定
''调用方法2: 直接创建(后期绑定)  set d=createobject("scripting.dictionary ")
Sub TTTDictionary1() ''前期绑定 申明
Dim s As New Dictionary
End Sub

Sub TTTDictionary2()  ''后期绑定
Set d = CreateObject("scripting.dictionary ")
End Sub

''add 方法
'object.add(key,item)  key 唯一
Sub TDictionaryadd()
Dim s As New Dictionary

s.Add "张三", "123"
s.Add "李四", "456"

''keys 方法  返回一个数组 其中包含一个 Dictionary 对象中的全部现有关键字
i = s.Keys(0) ''前期绑定写法   返回字典排位第一的
'j = Application.Index(s.Keys, 1) ''后期绑定 方法2

k = s.Keys   ''赋值 变成了数组
kk = k(0)     ''取数组的值
 

''Items 方法 返回一个数组 其中包含一个 Dictionary 对象中所有项目
r = s.Items(0)  ''前期绑定写法  返回字典的第一个对应的解释I
'l = Application.Index(s.Items, 1) '方法2
t = s("张三")                     '方法3
w = s.Items
v = w(1)

End Sub
''字典对象的属性有4个,compareMode 属性 count 属性 key属性 Item 属性
Sub 字典属性()
'Set d = CreateObject("scripting.dictionary")
Dim d As New Dictionary
'CompareMode 属性  区分大小写
d.CompareMode = 0 '1则不区分大小写   0则区分大小写
d.Add "a", ""
d.Add "A", ""

d.Add "张三", "135555555"
d.Add "李四", "1356666666"
'2 count 属性  统计
k = d.Count ''统计项目数

'3 key 属性 修改一个 key
d.Key("张三") = "刘五"

'4.Item 属性
i = d.Items    ''条目明细

d.Item("刘五") = "123"  ''修改条目
i = d.Items

d("刘五") = "456" '简写
i = d.Items

End Sub

Sub 数组写入字典()
Dim d As New Dictionary
On Error Resume Next  ''错误继续执行  如果有重复会跳过
arr = Range("a1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(arr)
   d.Add arr(i, 1), arr(i, 2)

Next
i = d.Keys
j = d.Items

End Sub


Sub 数组写入字典2()
Dim d As New Dictionary
On Error Resume Next  ''错误继续执行  如果有重复会跳过
arr = Range("a1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(arr)
     j = arr(i, 1)
     m = arr(i, 2)
     d.Item(arr(i, 1)) = arr(i, 2)  ''修改解释  要修改的关键字没有 就添加到字典中去
     k = d.Item("张三")
Next
i = d.Keys
j = d.Items
End Sub
'总结 对于字典Item 值得修改  1 . 有key 则修改, 无key 则添加

Sub 多表不重复值汇总()
Dim d As New Dictionary

For Each sh In Sheets
    If sh.Name <> "Sheet1" Then
    arr = sh.Range("a1:a" & sh.Cells(Rows.Count, 1).End(xlUp).Row)
     For Each rng In arr
      d.Item(rng) = ""   ''修改解释  要修改的关键字没有 就添加到字典中去
     Next
   End If
Next

[a1].Resize(d.Count) = Application.Transpose(d.Keys)
End Sub

'''实例:求每种产品第一次采购单价
Sub first()
Dim arr()
On Error Resume Next
Set d = CreateObject("scripting.dictionary")
arr = Range("a1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(arr)

d.Add arr(i, 1), arr(i, 2)   '' 添加 如果存在就会跳过继续执行


Next

[e1].Resize(d.Count) = Application.Transpose(d.Keys)

[f1].Resize(d.Count) = Application.Transpose(d.Items)
End Sub

Sub last()
Dim arr()
On Error Resume Next
Set d = CreateObject("scripting.dictionary")
arr = Range("a1:b" & Cells(Rows.Count, 2).End(xlUp).Row)
For i = 1 To UBound(arr)
 
     d.Item(arr(i, 1)) = arr(i, 2)

Next

[h1].Resize(d.Count) = Application.Transpose(d.Keys)

[i1].Resize(d.Count) = Application.Transpose(d.Items)

End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多