分享

excelvba字典学习笔记

 hdzgx 2019-11-24

'字典学习

'声明本模块中默认的比较方式,只能是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格式输入域keyitem

        '如果不加.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 总结

   '字典一般用在去重,计数等方面,一定程度上代替函数中的vlookupcountif

   '一般先把数据装入数组,然后用字典进行去重和计数处理,其中主要会用到exists方法。

   '然后进行其他操作,然后把值输入到单元格中,或者把数据输出到数组,再进一步输出到单元格中。

   '最后把数组和字典setnoting以释放内存

End Sub


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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多