字典双层嵌套解分类抽取不重复值问题

文摘   教育   2024-09-26 19:50   广东  
今天来看一个字典嵌套的经典案例,关于分类抽取不重复值的问题。下面我们来看看题目

如图,有若干个科目大类,C列为各大类下分出来的科室小类,现在我们要从各大类中抽取指定小类,那么你会怎么做呢?
此题用字典来做较简单,这里就是用字典啦,当然你也可以用用其他方法。感兴趣的动动手吧
下面我们来看看代码:

Sub test()    Dim arr(), d As Object, key$, i%    arr = Range("A1").CurrentRegion.Value    Set d = CreateObject("Scripting.Dictionary")    For i = 2 To UBound(arr)        If Len(arr(i, 1)) > 0 Then            key = arr(i, 1)            If Not d.exists(key) Then Set d(key) = CreateObject("Scripting.Dictionary")        End If        d(key)(arr(i, 3)) = ""    Next        Dim brr(), lst(), n%, sr$    brr = Range("F1").CurrentRegion.Value    Randomize    For i = 2 To UBound(brr)        key = brr(i, 1): lst = d(key).keys        n = Int(d(key).Count * Rnd)        brr(i, 2) = lst(n)        d(key).Remove lst(n)    Next    Range("F1").Resize(UBound(brr), UBound(brr, 2)) = brrEnd Sub

第3行:数据装入数组

第4行:创建字典

第5行:循环数据源A列

第6行:数据长度大于0则装入字典

第7-8行:如果字典中该关键字不存在,则加入字典,并对该项进行创建二层字典

第10行:将小分类装进二层字典

第14行:将结果区域装入数组

第15行:重置随机发生器

第16行:循环结果区域数组

第17行:将小分类的数据源装入数组

第18行:随机抽取一个一到小分类数量的随机数

第19行:将该抽取结果装入结果数组第二行

第20行:使用字典的remove方法移除二层字典的该分类项

第23行:将结果数组导入区域

这是一个经典的字典嵌套案例,如果你看不懂,建议收藏慢慢研究。
下面来看看效果

好了,本期教程就到这里啦,走过路过的点个关注分享一下吧,谢谢啦,如果你是一个VBA小白,想要了解该如何开始学习VBA,建议看看以下文章

Excel VBA学习路线知识框架梳理(小白VBA入门必看-建议收藏)

求关注-求星标-求点赞-求看-求分享
最近创建了一个VBA学习交流群,如有需要进群可以添加微信 jaresfzz


Excel应用教程
主要提供Excel vba,函数,图表,数据透视表,pq,Js等教程
 最新文章