'字典学习 '声明本模块中默认的比较方式,只能是text或者binary;如果不声明的的话,默认为二进制比较,但是对VBA字典中的比较方式没有影响。。 'Option Compare Text '文本比较,不区分大小写;例如:"a" = "A" 会返回true; 'Option Compare Binary '系统默认的比较方式,二进制比较,区分大小写;例如: "a" = "A" 会返回false,"a" > "A" 会返回true。 Sub 字典学习() '00 综述 '四个属性:comparemode,count,key,item '六个方法:add,exists,items,keys,remove,removeall 'key关键字 'item项 '01 字典的引用方式 '01 前端引用,需要先勾选字典脚本:工具-引用-Microsoft scripting runtime,然后才可以使用,程序迁移不方便;输入d.后会有下拉框提示 ' Dim d As New Dictionary '02 后端引用,不需要勾选字典脚本,程序迁移方便;输入d.后没有提示 Dim d As Object Set d = CreateObject("scripting.dictionary") '02 comparemode属性;设置比较方式。 ' d.CompareMode = -1 '使用 Option Compare 陈述式的设定进行比较。经测试VBA中不适用,不知VB中能不能用。 ' d.CompareMode = BinaryCompare '或0;默认的比较方式;进行二进制比较,区分大小写 ' d.CompareMode = TextCompare '或1;进行文本比较,不区分大小写 ' d.CompareMode = DatabaseCompare '或2;仅用于 Microsoft Access。进行基于您自己资料库中资讯的比较。 '03 add方法;向字典中添加元素。 On Error Resume Next For i = 1 To 4 '要用range("a1").value格式输入域key和item; '如果不加.value,则字典的key为单元格,在进行输出的时候会出现错误; '例如:不加.value的时候,Debug.Print d.Item("a")会输出空值 '也可以先把值装入数组,再从输入装入字典。类似:'arr = Range("a2:b" & i),然后让字典从数组中获取值,提高程序运行速度。 d.Add Range("a" & i + 1).Value, Range("b" & i + 1).Value '如果key已存在会报错 ' d(Range("a" & i + 1).Value) = Range("b" & i + 1).Value '没有写add,效果同上;但是如果key已存在,会直接覆盖item,不会报错,相当于修改item值 Next On Error GoTo 0 ' MsgBox d.Item("a") '04 count属性;统计字典中元素的个数 j1 = d.Count Debug.Print j1 '05 key属性,用于修改key值 d.Key("a") = "g" 'key属性用法,修改已有的key值,如果字典中没有待修改的key值,则会报错 Debug.Print d.Item("g") '输出结果为“苹果” ' d.Key("e") = "h" '06 item属性: ' Debug.Print d.Item("g") '输出key为"g"的项,对应的item值; d.Item("b") = "西红柿" '相当于d("b")= "西红柿";如果key值不存在,也相当于d.add("b") = "西红柿",存在的话,会报错。 'd("b") 等于d.item("b") [G1] = d("b") [G2] = d.Item("b") '07 exists判断一个key是否已经存在,返回布尔值,此方法最常用。 ' If d.Exists("a") = True Then xxx '08 keys方法和items方法,一般用于把值输出到数组,进行进一步处理或输出 arr = d.Keys brr = d.Items Range("e1:e4") = Application.Transpose(d.Keys) Range("f1:f4") = Application.Transpose(d.Items) '09 remove方法,清除字典中的一条记录 d.Remove ("b") '10 removeall方法,清除字典中的所有元素 d.RemoveAll 'removeall之后d仍然是字典对象 Set d = Nothing '此操作完成后未赋值的object对象 '11 总结 '字典一般用在去重,计数等方面,一定程度上代替函数中的vlookup,countif等 '一般先把数据装入数组,然后用字典进行去重和计数处理,其中主要会用到exists方法。 '然后进行其他操作,然后把值输入到单元格中,或者把数据输出到数组,再进一步输出到单元格中。 '最后把数组和字典set为noting以释放内存 End Sub |
|