vba字典(dictionary)示例

option explicit
sub test()
    dim dict,arr,i
    set dict = CreateObject("Scripting.Dictionary")

    '一组数据放到字典
    arr = Range("A1").CurrentRegion
    for i = 2 to UBound(arr) step 1
        dict(arr(i,1)) = arr(i,2)
    next

    arr = Range("D1:E" & Cells(Rows.Count,"D").End(xlUp).Row)
    for i = 2 to Ubound(arr) step 1
        if dict.Exists(arr(i,1)) Then
            arr(i,2) = dict(arr(i,1))
        else
            arr(i,2) = "无对应数据"
        end if        
    next

    Range("D1").resize(ubound(arr),2) = arr

    set dict = nothing
end sub

sub Test3()
    dim dict,arr,i
    set dict = CreateObject("Scripting.Dictionary")
    arr = range("a1:b" & cells(rows.count,"a").end(xlup).row)
    for i = 1 to ubound(arr) step 1
        if not dict.exists(arr(i,1)) Then
            dict(arr(i,1)) = arr(i,2) 
        else
            dict(arr(i,1)) = dict(arr(i,1)) + arr(i,2) 
        end if
    next

    range("d:d").clearContents
    range("d1").resize(dict.count,2) =excel.application.transpose(array(dict.keys,dict.items)) 
    
    'dict.remove(xxx)
    'dict.removeall()

    set dict=nothing    
end sub

sub Test4()
    dim arr,dict,i,j
    set dict = CreateObject("Scripting.Dictionary")
    'vb的数组比较坑,维度与元素都从1开始
    arr = range("a1").currentregion
    for i = 2 to ubound(arr) step 1
        dict.removeall
        for j = 2 to ubound(arr,2)-1 step 1
            if not dict.exists(arr(i,j)) Then
                dict(arr(i,j)) = ""
            end if
        next
        arr(i,ubound(arr,2)) = join(dict.keys,",")
    next
    
    range("a1").currentregion = arr
    set dict = nothing

end sub

 

### 回答1: VBA字典嵌套的示例代码如下:Dim dict As Object Set dict = CreateObject("Scripting.Dictionary")dict.Add "键1", "值1" dict.Add "键2", "值2"Dim nestedDict As Object Set nestedDict = CreateObject("Scripting.Dictionary")nestedDict.Add "键3", "值3" nestedDict.Add "键4", "值4"dict.Add "键5", nestedDictMsgBox dict("键5")("键3") ### 回答2: VBA中的字典嵌套是指在一个字典中再添加一个或多个字典的方式。字典嵌套可以实现更复杂的数据结构,可以将多种类型的数据组织在一起,并且可以根据需要进行随时的插入、删除、修改和获取操作。 以下是一个VBA字典嵌套的示例代码: ``` Sub DictionaryNestedExample() Dim dictParent As Object Set dictParent = CreateObject("Scripting.Dictionary") ' 添加嵌套字典 Dim dictChild1 As Object Set dictChild1 = CreateObject("Scripting.Dictionary") dictChild1.Add "Key1", "Value1" dictChild1.Add "Key2", "Value2" dictParent.Add "Child1", dictChild1 Dim dictChild2 As Object Set dictChild2 = CreateObject("Scripting.Dictionary") dictChild2.Add "Key3", "Value3" dictChild2.Add "Key4", "Value4" dictParent.Add "Child2", dictChild2 ' 访问嵌套字典的元素 Debug.Print dictParent("Child1")("Key1") Debug.Print dictParent("Child2")("Key4") ' 修改嵌套字典的元素 dictParent("Child1")("Key2") = "NewValue" Debug.Print dictParent("Child1")("Key2") ' 删除嵌套字典的元素 dictParent("Child2").Remove "Key3" Debug.Print dictParent("Child2").Count ' 遍历嵌套字典 Dim keyParent As Variant Dim keyChild As Variant For Each keyParent In dictParent.Keys Debug.Print "Parent Key: " & keyParent For Each keyChild In dictParent(keyParent).Keys Debug.Print "Child Key: " & keyChild & ", Value: " & dictParent(keyParent)(keyChild) Next keyChild Next keyParent End Sub ``` 以上代码创建了一个名为`dictParent`的字典,并在其中添加了两个嵌套字典`dictChild1`和`dictChild2`。通过使用键值来访问字典嵌套的元素,并且对嵌套字典的元素进行了修改和删除操作。最后,使用循环遍历了嵌套字典的所有元素,并输出了其键和值。 ### 回答3: 以下是一个VBA字典嵌套的示例代码: ``` Sub DictionaryNestedExample() Dim outerDict As New Scripting.Dictionary Dim innerDict As New Scripting.Dictionary ' 内层字典 innerDict.Add "姓名", "张三" innerDict.Add "年龄", 25 innerDict.Add "性别", "男" ' 外层字典 outerDict.Add 1, innerDict ' 输出内层字典的值 Debug.Print outerDict(1)("姓名") Debug.Print outerDict(1)("年龄") Debug.Print outerDict(1)("性别") ' 修改内层字典的值 outerDict(1)("年龄") = 26 ' 输出修改后的值 Debug.Print outerDict(1)("年龄") ' 删除内层字典的一个键值对 outerDict(1).Remove "性别" ' 检查键是否存在并输出值 If outerDict(1).Exists("性别") Then Debug.Print outerDict(1)("性别") Else Debug.Print "键 '性别' 不存在" End If End Sub ``` 该示例代码创建了一个外层字典 `outerDict` 和一个内层字典 `innerDict`。内层字典存储了一个人的姓名、年龄和性别。外层字典使用数字键值1来存储内层字典。通过访问外层字典的值,我们可以获取内层字典的键值对。 之后,示例代码输出了内层字典的值,并修改了内层字典的年龄键对应的值。接着,示例代码删除了内层字典的性别键值对,并检查了键 '性别' 是否存在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值