分享

Excel VBA 8.55活用VBA字典 玩转多级联动

 Excel和VBA 2022-01-03

VBA公私模块要分清 多级联动效果全靠它


点击上方“Excel和VBA”,选择“置顶公众号”

致力于原创分享Excel的相关知识,源码,源文件打包提供

一起学习,一起进步~~


上节我们学习了多级联动来实现数据有效性的方法,因为会涉及到 一个两个知识点,一个是工作表的事件,另外一个就是字典,这两个我们之前的没有学习过,所以上一节我们只讲解了工作表的事件,而字典的部分,则放到今天来讲解。

所以今天我们接着上一节的内容

场景说明

上一节我们学习了工作表事件的写法

这一节我们继续学习中间的内容,就是字典。

代码解析

首先我们想来理解下,VBA中字典的概念

字典的概念,我们可以理解为我们在查字典, 比方说英汉字典

一个英文单词,对照多个解释

但一个字典只会针对一个内容出现一次解释,不会出现两次,这是字典的唯一性,这是字典的键

一个内容,比方说单词,有很多种解释,这就是字典的值,可以有很多过,也可以是重复的

比方说下面的案例

chicken,就是字典的键

他对应的解释,鸡肉,胆怯等,都是字典的值。

现在有了这个键-值的概念之后就可以继续往下走了。

为什么要在这里使用字典呢?

从上面的图中可以看到,我国现在只有34个省级行政区+直辖市,但是这份数据表中,起码有上万行,因为一个省级行政单位下面,还有很多个市区,一个市级单位,下面还有很多个区县,所以这份数据中重复数据非常的多

但是我们的数据有效性,肯定是只有一个,那么就是就是要从上面的这份重复数据中,获取唯一值,那么如何获取呢?

我们上面说了,字典的键有唯一性,所以这里要使用字典。

我们取其中一个字段,就是省来进行讲解

如何获取省级单位的唯一值

For Each rng In Sheets("省市县名单").Range("b3:b" & row1)            
d(rng.Value) = Range("a1")
        Next

遍历第一列数据,将所有的数据都装入字典中

但是比方说北京有好几个,如果都装进去是不是错了呢?

没错,但是你不可能都装进去,因为字典的唯一性,你只能装进去一个,如果还继续装进去第二个相同数据,就会报错,那么为什么案例的代码还可以继续执行呢?

关键代码在最上面这句代码,有报错,则忽略报错,继续往下执行,这样一个循环过程之后,我们就有了一个省级单位的字典了

总共34个,一个都没有少

那么这个时候,既然已经有了省级单位的数据了,就可以直接放到有效性里面去了,将单元格的有效性,设置为我们的这个字典

With Target.Validation            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(d.keys, ",")
        End With

有了之前的代码基础之后,这里就很好理解了,直接套用即可。

然后我们继续往下走,来到市级单位

这时候,我们已经在第一列选择了省级单位了。

还是利用数据表的关系,便利循环第一列数据,找出省所对应的所有市,装入数组中,这样一个过程就完成了,就相同的方式得到了市的字典了。

同理,也可以用在县区的操作中

今天的讲解就全部讲解完了,可能大家理解起来还是比较的难理解,还需要下面细细的品味,多调试,多查看结果,才可以理解。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多