精华内容
下载资源
问答
  • 1)key属性: 修改字典中某一键值对的key值 2)item属性: 修改字典中某一键值对的item值 3)keys方法: 获取字典的所有键 4)items方法: 获取字典的所有值 5)item属性: 如果 key已存在,则修改其item值;如果不...

    1)key属性: 修改字典中某一键值对的key
    2)item属性: 修改字典中某一键值对的item

    3)keys方法: 获取字典的所有键
    4)items方法: 获取字典的所有值

    5)item属性: 如果 key已存在,则修改其item值;如果不存在,则新增
    6) add方法: 如果 key已存在,将报错;如果不存在,则新增

    Sub t()
        Dim d As Dictionary   '定义变量
        Set d = New Dictionary   '创建对象
    	'上面两句话等价于 dim d as New Dictionary 	
    
            
    '一、获取 键值对的属性    
        k = d.Keys   '获取字典的所有键
        i = d.Items   '获取字典的所有值
    
          
    '二、修改 键值对的键、值属性
        '使用“key”属性,修改 键为“小明”的对象的键
        d.Key("小明") = "18岁"   '如果该键不存在,将会报错
        
        '使用“Item”属性,修改 键为“小明”的对象的值
        d.Item("小明") = "18岁"   '如果该键不存在,则新增
            
        i = d.Items
        
    
    '三、新增 键值对
        '使用“add”方法,新增
        d.Add "小明", "100岁"   '如果该键已存在,将会报错
        
        '使用“Item”属性,新增
        d.Item("小明") = "0岁"   '如果该键已存在,则修改它的值
            
        k = d.Keys   '获取字典的所有键
        i = d.Items   '获取字典的所有值
        
    End Sub
    

    请添加图片描述

    展开全文
  • 1 字典的遍历方法 即使是后期绑定,也可以用 for each i in dict1.keys() '这里用到的 dict1.keys() 但不是 dict1.keys(i) 是可以的 Sub test_dict11() Dim dict1 As Object Set dict1 = CreateObject(...

     

    1 字典的遍历方法

    • 即使是后期绑定,也可以用 
    • for each i in dict1.keys()   '这里用到的 dict1.keys()   但不是 dict1.keys(i) 是可以的
    Sub test_dict11()
    
    Dim dict1 As Object
    Set dict1 = CreateObject("scripting.dictionary")
    
    
    dict1.Add 1, "h"
    dict1.Add 2, "e"
    dict1.Add 3, "l"
    dict1.Add 4, "l"
    dict1.Add 5, "o"
    dict1.Add 6, "world"
    
    For Each I In dict1.keys()
       Debug.Print I & "," & dict1(I)
    Next
    Debug.Print
    '知道key 去查item
    
    Debug.Print dict1(1)
    Debug.Print dict1.Item(2)
    Debug.Print
    
    
    
    End Sub

     

    2 用key查item,常规操作

    • dict1(key)
    • dict1.items(key)

     

    3 用item查key 非常规操作

    3.1 我自己的思路:dict1.keys() 和 dict1.items() 是一对对对应的

    • 利用key,item是成对出现的 字典设计
    • 如果item不重复的话,那么item的index就是key的index,index是同步的
    • 即使item重复,也可以循环筛出多个index
    • 但是要注意,这个方法必须前期绑定才生效。因为只有前期绑定,才支持 dict1.keys(i) 这种循环

     

    • 不减1就出错,因为match函数的问题,是工作表函数
    • 这样用match查找,还是需要前期绑定的支持,因为 dict1.keys(index) 直接用必须前期绑定
    Sub test_dict1()
    
    Dim dict1 As New Dictionary
    
    dict1.Add 1, "h"
    dict1.Add 2, "e"
    dict1.Add 3, "l"
    dict1.Add 4, "l"
    dict1.Add 5, "o"
    dict1.Add 6, "world"
    
    '方法1
    '下面的反查方法要生效,必须是前期绑定!!!
    '知道item去查key
    '利用key,item 应该是成对的,也就是分别在 keys() items()的index是一样的。
    For J = LBound(dict1.Items()) To UBound(dict1.Items())
        If dict1.Items(J) = "world" Then
    '     If dict1(J) = "h" Then
           Debug.Print J             'keys(),items()数组没定义,index是从0开始的
           Debug.Print dict1.Keys(J)
        End If
    
    Next
    Debug.Print
    
    '方法2,也只有前期绑定支持
    '不减1就出错,因为match函数的问题,是工作表函数
    '这样用match查找,还是需要前期绑定的支持,因为 dict1.keys(index) 直接用必须前期绑定
    Debug.Print dict1.Keys(Application.Match("world", dict1.Items(), 0) - 1)
    
    
    End Sub
    

     

     

    4 方法2,后期绑定也生效

    • 后期绑定也可以查
    • 如果是后期绑定
    • 不能直接用 dict.keys() dict.items()
    • 但可以用个数组中转绕一下即可
    arr1=dict.keys()
    arr1(index)
    arr2=dict.items()
    arr2(index)

     

    Sub test_dict22()
    '后期绑定各种测试
    
    
    Dim dict1 As Object
    Set dict1 = CreateObject("scripting.dictionary")
    
    
    dict1.Add 1, "h"
    dict1.Add 2, "e"
    dict1.Add 3, "l"
    dict1.Add 4, "l"
    dict1.Add 5, "o"
    dict1.Add 6, "world"
    
    
    '后期绑定,为什么又可以使用dict1.keys()? for each可以使用? 不能用index方式使用这2个数组?
    For Each I In dict1.Keys()
        Debug.Print I & " ";
        Debug.Print dict1(I)
    Next
    Debug.Print
    
    
    
    '数组中转
    'dict1.keys()  dict1.items() 都可以使用,但不能做index for i 的这种遍历,中转的数组可以
    'dict1里 key-item同步,只要item不重复,可以用相同的变量循环
    
    arr1 = dict1.Keys()
    arr2 = dict1.Items()
    For I = LBound(arr2) To UBound(arr2)
        If arr2(I) = "world" Then
           Debug.Print arr1(I) & "," & arr2(I)
        End If
    Next
    Debug.Print
    End Sub

     


     

    展开全文
  • VBA 字典使用小结:关键字循环

    千次阅读 2019-12-22 16:59:03
    I key(键)不允许重复。当给字典元素赋值时,不存在key时可以新建,存在key时可以更新值。 II 数据元素通过key进行索引,我们知道,数据是通过下标进行索引的,所以顺序很重要。而字典是通过key进行索...

    一、字典的基本知识

    字典是一种封装有属性和方法的对象,简单理解:字典其实就是一些“键-值”对。

    字典相当于一个多行二列的二维数组或单元格数据区域。

    字典数据结构有两个很重要的特性:

    I key(键)不允许重复。当给字典元素赋值时,不存在key时可以新建,存在key时可以更新值。

    II 数据元素通过key进行索引,我们知道,数据是通过下标进行索引的,所以顺序很重要。而字典是通过key进行索引的,所以不考虑元素顺序。通过key进行索引,在特定的场合,有它的优势所在。

    应用场合:

    1、对一列数据提取唯一值;

    2、进行分类汇总;

    3、多条件复杂汇总等。

    二、声明字典

    VBA中创建字典有两种方法:

    2.1 引用声明(前期绑定)

    在VBE菜单中,选择“工具-引用”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动目录(C:\Windows\System32),然后找到scrrun.dll,确定确定返回就行了。

    添加引用后,就可以像定义其它变量一样声明使用字典了。

    Sub test()

    Shell ('Regsvr32 C:\Windows\System32\Scrrun.dll') 'Dos 下运行注册DLL

    'Toos -> References -> Microsoft Scripting Runtime 'VBE中工具、引用

    Dim dic As New Dictionary '前期绑定后就可以直接定义字典类型变量并初始化

    For i = 1 To 10

    dic(i) = i * 10

    Next

    t1 = dic.keys(2) '然后就可以直接读取第3个字典元素的关键词(注意字典数组下标是0开始)

    t2 = dic.Items(2) '同样可以直接读取第3个字典元素的项目内容(注意字典数组下标是0开始)

    End Sub

    2.2 直接声明(后期绑定)

    Dim d As Object

    Set d = CreateObject("Scripting.Dictionary")

    注:前期绑定的好处是:在代码编写过程中,可以直观的看到对象的属性,方法等。

           后期绑定的好处是:代码简单明了。

    三、 字典的方法

    字典有6个成员方法:Add、Exists、Keys、Items、Remove、RemoveAll。使用方法如下:

    3.1 Add  用于添加内容到字典中。

    方法一:d.Add key, item  第一个参数为键,第二个参数为键对应的值。如d.Add '优秀', 80

    方法二:d(key) = item  直接赋值的方式来把内容添加到字典中,如:dic('及格') = 60

    'Add [key/item] if key is new

    '如果key不存在则直接加入[key/item]

    dic('及格') = 70

    'Cover [item] if key is exists without Err

    '如果key存在则覆盖更新item 且不产生key存在的错误提示

    '因此本质上,用这个方法给字典赋值、比使用 Dic.Add, item 更好!

    '如需要对key存在进行错误处理,可使用Dic.Exists(key)方法,更加灵活。

    3.2 Exists()  用于判断指定的关键词是否存在于字典(的键)中。

    d.Exists(key)   如果存在,返回True,否则返回False。通常会在向字典中添加条目的时候使用,即先判断字典中是否已存在这个记录,如果不存在则新增,否则进行其它的操作。

    3.3 Keys()

    d.Keys()  获取字典所有的键,返回类型是数组(数组下标从0开始)。

    字典使用for each next结构进行遍历时,返回的是key。

    For Each di In d'也可以写成For Each di In d.keys

    k = k + 1

    Cells(k, 15) = dic(di)

    Next

    3.4 Items()

    d.Items() 获取字典所有的值,返回类型是数组。

    3.5 Remove()

    d.Remove(key) 从字典中移除一个条目,是通过键来指定的。

    如果指定的键不存在,会发生错误。

    3.6 RemoveAll

    d.RemoveAll 清空字典。

     

    四、 字典的属性

    字典有4个属性:Count、Key、Item、ConpareMode。

    4.1 Count

    用于统计字典中键-值对的数量。也可以简单理解为统计字典中键的个数。

    常用在字典遍历时配合循环使用,如:

    For i = 0 To d.Count - 1

    4.2 Key

    用于更改字典中已有的键。如:

    d.Key('apple') = 'Orange'

    如果指定的键不存在,则会产生错误。

    4.3 Item

    用于写入或读取字典中指定键的值,如果指定的键不存在,则会新增。如:

    '读取

    Debug.Print d.Item('apple')

    '写入

    d.Item('apple') = 10

    4.4 CompareMode

    当用字符串做为key时是否区分大小写,如 Dic.CompareMode=1不区分大小写,Dic.CompareMode=0区分大小写

    默认不写是区分的。

    Sub test10()

    Dim dic

    Set dic = CreateObject('Scripting.Dictionary')

    dic.Add 'D', 0

    dic.Add 'd', 0

    '因为默认的是区域大小写的,所以不报错

    End Sub

    Sub test11() '不区分大小写,

    Dim dic

    Set dic = CreateObject('Scripting.Dictionary') '后期绑定引用字典对象

    dic.CompareMode = 1

    dic.Add 'D', 0

    dic.Add 'd', 0

    '上面的代码报错了,因为dic.CompareMode = 1不区分大小写,所以

    '你装后大写的D之后,再装小写的d,重装了,报错

    End Sub

    五 、总结一下:字典元素的添加、访问

    任何语言的复合数据类型,做为一种数据元素容器,都要考虑数据元素的增、查、删、改,并用适当的成员方法封装起来。

    5.1 字典元素的添加

    d.Add 'a', 'example1'

    d.Add 'b', 9

    'd.Add 'b', 7 'add重复key会报错

    d('b') = 7 '这样会直接覆盖,不会报错

    'd.Item('b') = 7 '与上者相同

    d('c') = 'example2'

    5.2 字典元素值通过key的访问

    Cells(1, 1) = d('a')

    'Cells(1, 1) = d.Item('a') '与上者相同

    六、 字典映射到单元格区域

    由于字典的keys/items为按水平方向排列的一维数组,在将数据存到excel表格中时,应使用transpose函数进行行列转换.

    '把字典中keys/items结果分别输出到工作表的某一列

    [a1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.keys) 'Output keys result

    [b1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.items) 'Output items result

    七 、实例应用

     

    链接:https://pan.baidu.com/s/10GzgIVNTGrti8RQAqvUofw 
    提取码:ybh3 
    复制这段内容后打开百度网盘手机App,操作更方便哦

     

    展开全文
  • vba字典引用

    2020-07-07 16:41:17
    如果key值用变量引用,需要把相关变量加上双引号。

    如果key值用变量引用,需要把相关变量加上双引号。

    展开全文
  • VBA字典(详解,示例)

    万次阅读 多人点赞 2019-05-03 17:14:36
    字典主要作用:条件计数、条件求和、去重、匹配。 本篇主要介绍了VBA字典以上使用方法及注意事项。
  • VBA 字典方法及属性介绍

    千次阅读 2019-08-13 20:05:34
    字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项...VBA字典有4个属性Count , Key, Item, CompareMode Sub dictest() Dim d As Object '声明字典对象,亦可通过声明变体型变量完成声明 &g...
  • 仅取第一次出现的数据,具体代码如下,因为注释比较详细,在这里就不过多的说明,需要注意一点的是,我这里使用的数据,去重列是第二列,所以我将字典转换成数组时,是将数组的第2列等于字典key值,为保持数据结构...
  • excel vba 字典使用方法学习

    千次阅读 2020-03-09 11:26:24
    字典的索引(keys)不能重复,常用字典来去重,字典是一个二维数组,其中keys不重复,...如果不声明的的话,默认为二进制比较,但是对VBA字典中的比较方式没有影响。。 'Option Compare Text '文本比较,不区分大小...
  • 盘点VBA字典的写入技巧!

    千次阅读 2019-06-30 14:14:08
    下图中A列为姓名,有重复的,我们都知道字典里的key是不能重复的,如果我们能把A列的姓名写入字典,那么得到的keys就是不重复的姓名,这样就达到了去重复的目的。 往字典中写入项目对用Add方法,所以我们直接用该...
  • VBA嵌套字典的反序列化 作者:Antoniothefuture 关键词:VBA、VB、字典、Dictionary、反序列化、嵌套 开发平台:VBE 平台版本上限:未知 平台版本下限:未知 开发语言:VBA 简介: 将表示VBA嵌套字典的字符串...
  • VBA嵌套字典的递归输出(序列化)

    千次阅读 2019-03-20 21:56:49
    VBA嵌套字典的递归输出(序列化) 作者:AntoniotheFuture 关键词:VBA字典,Dictionary,嵌套,递归,序列化 开发平台:VBE 平台版本上限:未知 平台版本下限:未知 开发语言:VBA 简介: 用递归的方法将...
  • VBA: 字典的介绍与实例

    万次阅读 多人点赞 2017-12-14 15:46:21
    基本语句 Sub dictest() ' 字典简介 ' 字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项...' VBA字典有4个属性Count , Key, Item, CompareMode ' 创建字典"d" Dim d As O...
  • VBA-Dictionary字典基本用法

    千次阅读 2020-07-20 13:21:14
    另外,使用dict.item(key)=value,如果dict中没有关键字key,会自动添加key:value对。 在使用cells读取数值存放到数组中时,一定要加value;cells(i,j).value否则会将一个range对象赋值给字典 标题3.
  • VBA 利用字典去重

    千次阅读 2019-08-13 17:58:47
    Sub 利用字典去重() Dim aOld, aNew, Dic '声明数组、字典 Dim i As Long Dim sOld, sNew As String '声明字符串 Set Dic = CreateObject("scripting.dictionary") '创建字典 sOld = "a b c 1 2 1 a c d" ...
  • Excel VBA Dictionary - A Complete Guide - Excel Macro Mastery A Quick Guide to the VBA Dictionary Function Params Early binding reference “Microsoft Scripting Runtime” (Add using Tools-...
  • VBA字典

    千次阅读 2019-03-28 11:20:49
    Sub dictest() ’ 字典简介 ’ 字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key)和它的项(Item)...’ VBA字典有4个属性Count , Key, Item, CompareMode ’ 创建字典"d" Dim d As Object Set d...
  • Excel VBA 中使用字典总结 collection(集合)对象 VBA中有一个集合对象(collection),Collection 对象是一组可称为“单元”的有序项目的集合,可以理解为可以随意增减数量的一维数组。 Collection对象提供了一种...
  • vba通过字典方式进行查询,速度快

    千次阅读 2019-05-31 15:11:00
    Sub 字典() t=timer Dim arr, brr, crr, d, i& Sheets("目标表").Activate Set d = CreateObject("scripting.dictionary") arr = Sheets("源数据").Range("a1").CurrentRegion brr = Range("a1")....
  • vba字典用法示例Dictionary is a data type that can be used for different purposes. Dictionaries provide one key and one value matched together. JavaScript programming language does not provide the ...
  • 循环,add,需要判断是否重复 1.2 整体添加keys() items() ,整体生成数组 (用数组等)循环赋值给 keys() items() 1.3 循环赋值生成数组的方法 循环dict5(I) = "" 2 生成字典最合适的方法:循环赋值生成数组的...
  • VBA字典问题

    2020-05-19 17:17:26
    VBA字典问题 可以直接把cells(1,1)加入key, 但问题是这个Key有点特殊, 造成一些理解与取值上的问题如下 Sub Test() Dim d, dK Set d = CreateObject(“scripting.dictionary”) d(Cells(1, 1)) = 0 For Each dK In d...
  • Item方法可以返回包含字典内所有数据成员的可变数组,而Key方法则可以返回包含字典内所有键值的可变数组。 Dictionary对象的其他特性包括返回字典内成员数目的Count特性和能够让你控制内部搜索执行情况的CompareMode...
  • VBA中Dictionary对象使用(Key,Value)

    千次阅读 2019-08-09 06:42:27
    取关键字对应的值,注意在使用前需要判断是否存在key,否则dict中会多出一条记录 Value = dict.Item( " B " ) ' 修改关键字对应的值,如不存在则创建新的项目 dict.Item( " B " ) = 1000 dict.Item( " D " ) ...
  • VBA基础知识整理(字典,自定义函数)

    千次阅读 多人点赞 2019-05-13 16:40:59
    '1 什么是VBA字典? '字典(dictionary)是一个储存数据的小仓库。共有两列。 '第一列叫key , 不允许有重复的元素。 '第二列是item,每一个key对应一个item,本列允许为重复 'Key item 'A 10 'B 20 ...
  • 字典使用中的问题: Key自动被非意愿加入 问题1: 比如一开始并没有这个key(Rel),然后使用了IIF,d1中不存在这个Rel,第一次能正常取值Rel,但这个语句过后, 好像Rel就自动被加入到d1中了,从count,d1.exists()均发现了这...
  • VBA - 字典实例集锦

    2021-04-08 10:58:46
    字典统计不重复计次 1. 按接收日期批量不重复编号 问题: 以接收日期为主分项编号,同一天接收到的不同“大项目号”和“文件编号”给予序列编号,同一天“大项目号和文件编号重复”的编为一个号,同一天编号不...
  • vba字典

    千次阅读 2018-03-11 22:35:11
    字典对象的方法有 6 个: Add方法、 Keys方法、 Items方法、Exists方法、Remove 方法、 RemoveAll 方法Add 方法向 Dictionary 对象中添加一个关键字项目对。object.Add (key, item) 参数object 必选项。总是一个 ...
  • 其中,关键字Key具有唯一性,即在关键字Key所代表的数组中,将不允许出现重复数据,而Item则无此限制。 1 Add方法 使用字典对象的Add方法可以将一组关联的关键字与条目添加到字典对象中,其语法格式如下。 Object...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 543
精华内容 217
关键字:

vba字典重复key