34、VBA数组与字典解决方案51字典嵌套下拉框

今日我们继续讲解VBA数组与字典解决方案,今日讲解第51讲:对字典嵌套的理解及二级下拉菜单的制作.

在讲字典的时候,我反复说明,字典看视非常简单,由于它具有直达性可以省略去我们大量的循环查找代码,所以使用起来要特别留意很多用法和常规思路是不一致的,对于字典的理解:

1:键key、键值(或者较项)item 是非常重要的,key 一定是字符串,具有唯一性,item 可以为任何类型的数据.

2:keys 和items 是一维数组,他们的开始是从0开始到count-1结束。

3:再次理解字典的直达性,对于给定的键,可以直接得出键值不必循环查找.

今日我们利用字典的嵌套完成一个两级下拉菜单的制作,大家要认真理解,如下面的数据:

我要在一级菜单中实现A列的数值,在二级下拉菜单中实现对应于A列的B列的值,下面看我给出的代码:

Private Sub ComboBox1_Change()

ComboBox2.Clear

'二级下拉框对应的是第一级字典的键值为键的字典

ComboBox2.List = mydic(ComboBox1.Value).keys

End Sub

Private Sub UserForm_Activate() '第51讲 字典的嵌套的理解及二级下拉菜单的制作

'将数据装入数组

myarr = Range('a1').CurrentRegion.Value

Set mydic = CreateObject('Scripting.Dictionary')

For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

If Not mydic.Exists(strF) Then

'建立嵌套字典,第一重字典的键对应的键值为字典

Set mydicTemp = CreateObject('Scripting.Dictionary')

'注意下面的两种写法

'Set mydic.Item(strF) = mydicTemp

Set mydic(strF) = mydicTemp

End If

'注意下面的两种写法,嵌套字典的字典的键记入,键值为空

'mydic.Item(strF).Item(strS) = ''

mydic(strF)(strS) = ''

Next i

'一级下拉框对应的是第一级字典的键

ComboBox1.List = mydic.keys

End Sub

代码截图:

代码讲解:

1 上述代码利用了字典的嵌套,解决了两级下拉菜单的制作问题,在利用前要先加上一个窗体:

2 '将数据装入数组

myarr = Range('a1').CurrentRegion.Value

上述代码将源数据写入数组中备用

3 Set mydic = CreateObject('Scripting.Dictionary')

上述代码定义外层的字典.

4 For i = 2 To UBound(myarr)

strF = myarr(i, 1)

strS = myarr(i, 2)

If Not mydic.Exists(strF) Then

'建立嵌套字典,第一重字典的键对应的键值为字典

Set mydicTemp = CreateObject('Scripting.Dictionary')

'注意下面的两种写法

'Set mydic.Item(strF) = mydicTemp

Set mydic(strF) = mydicTemp

End If

'注意下面的两种写法,嵌套字典的字典的键记入,键值为空

'mydic.Item(strF).Item(strS) = ''

mydic(strF)(strS) = ''

Next i

上述代码中利用FOR NEXT在数组中建立循环,当Not mydic.Exists(strF),将数据存入字典,键是strF ,键值是一个字典:mydicTemp,如果能够找到外层字典的键,那么将建立内层字典的,即: mydic(strF)(strS)

(0)

相关推荐

  • Excel VBA 中使用集合和字典对比总结

    目 录 Excel VBA 中使用集合和字典对比总结 Collection(集合)对象 Collection 成员 Dictionary(字典) 对象 Dictionary 成员 字典与集合对比 Ex ...

  • List<String>转成String[]

    在项目的开发中总会遇到集合和数组这两种很常见的数据结构,有时候还会出现两者相互转化,因此在这里做一个小小的总结 list<String>转String[] 创建一个集合 List<S ...

  • 快速查找,插入有序,从源码分析 Python 底层如何实现字典的这些特性

    在<RealPython 基础教程:Python 字典用法详解>这篇文章中,我们介绍了 dict 的特性: dict 是存储键值对的关联容器 dict 中的 key 是唯一的 可使用 di ...

  • 三级下拉菜单的制作过程

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日的内容是第56讲,利用字典的嵌套,完成三级下拉菜单的制作. 在第54讲中我讲了利用字典的嵌套,完成二级下拉菜单的制作,很多朋友来信反馈说不过瘾,可 ...

  • 再次解释一下 Python 字典使用的哈希表

    我们在上一篇文章中分析了 CPython 中是如何实现 dict 的.由于涉及内容较多,我可能并没有描述清楚 dict 所用的哈希表的具体结构. 如果你也对此有疑问,不妨来看一下本文对哈希表结构的进一 ...

  • 下拉框多选,让你见识Excel宏与VBA的魅力

    相信表亲们很多人用过数据有效性,通过数据有效性定义序列,在下拉框中选择想要的选项,然而,数据有效性定义通过下拉框只能选择一个选项,如果要选择多个选项,怎么办呢?我们看看下面的动画: 看这个动画是不是感 ...

  • 下拉框 将数组

    大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第51讲:对字典嵌套的理解及二级下拉菜单的制作. 在讲字典的时候,我反复说明,字典看视非常简单,由于它具有直达性可以省略去我们大量的循环查找代 ...

  • 32、VBA数组与字典解决方案第39讲实现双条件数据汇总

    大家好,我们今天继续讲解VBA数组与字典解决方案,今日的内容是第39讲,利用数组与字典,实现双条件数据汇总的方法.大家或许在之前没有接触过字典,其实,字典在VBA中占据着很重要的内容.大家已经注意到了 ...

  • VBA数组与字典解决方案第46讲:进行数据的模糊分类汇总

    大家好,今日我们继续讲解数组与字典解决方案,今日讲解的是第46讲:利用字典和数组,进行数据的模糊分类汇总.在VBA中,字典是引用的对象,那么我们可否能建立一个对象的数组呢?可以的.我们今日就来利用这个 ...

  • 33、数组与字典解决方案第46讲利用字典和数组,进行数据的模糊分类汇总

    ​大家好,今日我们继续讲解数组与字典解决方案,今日讲解的是第46讲:利用字典和数组,进行数据的模糊分类汇总.在VBA中,字典是引用的对象,那么我们可否能建立一个对象的数组呢?可以的.我们今日就来利用这 ...

  • Excel VBA 5.21 新番 活用字典方法 轻松应对字段不同的工作簿求和

    一起学习,一起进步~~ 上两节的时候,我们学习了利用字典+数组的方法来实现工作簿的数据求和操作,通过这个方法,我们可以直接针对工作簿的内容进行计算,而不需要先合并工作簿,然后在针对合并后的工作簿展开计 ...

  • VBA简单入门40:用字典进行多列求和

    要求:按条件1进行多列求和. 思路: 1.将单元格数据放进数组arr,定义数组brr,设定和arr一样大小,用来存储求和的数据 2.对条件1进行计数,用字典去重复值计数. 依次遍历数组arr的数据,k ...

  • python笔记47-面试题:如何判断字典a在字典b

    前言 已知一个dict 比如a = {"a":1},另一个dict比如为b = {"a":1,"b":2},如何判断a是否在与b中. 一般在 ...

  • VBA数组 | 从入门到精通(4)- 常用方法

    今天我们来聊一下 关于数组的常用方法,前面三篇见文末! 很多新手容易犯这样的错误,把一维数组写到一列中,发现并不行! 01 |  数组转置 知识点: 1.Array的结果对应的是工作表中的一行区域,如 ...