前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA大牛用了都说好的嵌套循环

VBA大牛用了都说好的嵌套循环

原创
作者头像
猴子数据分析
修改2021-03-28 10:34:56
3.7K0
修改2021-03-28 10:34:56
举报
文章被收录于专栏:猴子数据分析

这是免费教程《Excel VBA:办公自动化》的第11节,介绍嵌套循环结构。

1.认识VBA:什么是VBA?

2.这些掌握了,你才敢说自己懂VBA

3.VBA变量5年踩坑吐血精华总结

4.VBA中重要的强制申明,谁看谁明白

5.VBA掌握循环结构,包你效率提高500倍

6.精通VBA分支结构,少写程序100行

7.VBA程序报错,用调试三法宝,bug不存在的

8.VBA字符串介绍,这篇就够了

9.还自己写代码?VBA录制宏了解下

10.VBA循环结构没过瘾,那就再来一篇

看了前前面的系列VBA内容,我想大家肯定都发现一个问题:前面所有实战案例都是在处理「单列多行」问题,可实际工作中我们往往遇到的是「多行多列」问题,这个问题应该如何处理呢?

我想说的是,这一节嵌套循环的分享就是专门谈论这个问题的。

1.什么是循环嵌套?

所谓的「循环嵌套」就是将我们前面所分享的分支结构循环结构等组合起来,然后完成单个知识点难以单独完成的复杂任务。

通俗解释就是:IF循环WHILE循环大家组合在一起。你中有我,我中有你,实现工作的实际需求。

2. 循环嵌套案例实操

案例:将利用「1-宏程序」根据「2-层级划分」的规则,对「3-数据区域」数据进行处理,形成「4-输出结果」。

首先,我们对这个案例的需求进行初步分析:

“利用「1-宏程序」”就是绘制一个颜值较高的圆角矩形,然后将其指定我们将要写的宏程序

“根据「2-层级划分」的规则”就是根据右侧的分级结构条件,利用IF分支结构进行指定条件判断。

“对「3-数据区域」数据进行处理”就是选择自己擅长的循环结构,对指定的数据区域进行逐个循环。

“形成「4-输出结果」”就是在指定位置输出指定格式的结果。

分析完上述的需求以后,我们基本是思路已明,那就继续前行。

和前面一样,首先,我们将已实现案例功能的代码展示出来;然后,阐述该段代码的主要架构;最后,模拟代码的运行,以便于加深大家的理解。

通过上图展示的代码,我们可以看到整个代码的核心架构采用了3层嵌套结构,分别为:

第1层的Do...While循环结构,其主要用来控制表格「行」方向的循环;

第2层的For循环结构,其主要用来控制表格「列」方向的循环;

第3层的IF分支结构,其主要用对指定条件进行判断。

通过3者组合起来形成的循环嵌套结构,最终完成了上述案例中较为复杂的「多行多列」需求。

根据上文的代码,我们模拟一下这个小程序的运行过程

1)程序读取前5行

程序使用了「强制申明」,定义了变量i和变量j,且将变量i赋初始值为3,而赋值变量i为3的主要原因是:因为变量i控制「行」方向的循环,而数据区域的判断是从第3行开始的。

2)程序执行Do...While循环体

程序读取「Do While Cells(i, 2) <> ""」表明程序进入了第1层的「行循环」,换句话就是:单元格B3的值是否为空?我们通过查看左侧发现「单元格B3=738」,不为空。然后,程序进入下一行执行。

3)程序执行For循环结构

程序读取「For j = 2 To 7」表明程序进入了第2层的「列循环」,换句话就是:j的取值在2到7之间,每循环一次j的值就增加1 ,直到j=7时整个For循环结束。

看到这里,可能大家有些疑问了,为什么变量i要限制它的取值范围?

大家心中肯定早就拥有了自己的答案:之所以将变量j的值限定在2-7之间,是因为我们需要判断的数据区域主要分布在B列-G列,其对应的cells数字值就是2-7。

4)程序执行IF分支结构

至此程序进入了If分支结构,通过前面我们可以知道此时:i = 3,j = 2,即:「Cells(2, 3)」表示「单元格B3」,通过查看左侧数据可以看到「单元格B3 = 738」,其位于「富农」范围区间,那么很明显只有第二个分支结构符合上述条件,即:程序自动执行「ElseIf Cells(i, j) >= 500 And Cells(i, j) < 700 Then」和「Cells(i, j) = Cells(i, j) & " | 富农"」。

而由于根据规则,符合条件后的单元格,将以指定的格式——「收入 | 等级」写入结果,比如:「738 | 土豪」。因此,才会出现「Cells(i, j) = Cells(i, j) & " | 富农"」这句代码。

然后,等到变量j执行完了其在2-7区间的所有取值后,原表第3行所有的数据将会转换完成,如下图:

换句话的意思就是:当「i = 3」时,For分支结构要循环1轮变量j,对于原表来说其就完成了第3行数据的转化。

5)程序读取「i = i + 1」和「Loop」

当程序执行到「i = i + 1」时候,表明上一轮变量i的循环执行已经完成;而程序执行到「Loop」时,则表明程序准备执行下一轮。

当程序符合「Do While Cells(i, 2) <> ""」这个条件时,程序将继续执行下一轮。一旦不符合上述条件,那么整个程序将跳出「Do...While」循环。

当「i = 15」时,此时「Cells(i, 2)」表示「单元格B15」,查看左侧表格可以发现,单元格为空,不符合条件,由于下面没有其他代码,进入「End Sub」语句,直接结束。

3.总结

循环嵌套就是将我们前面所分享的分支结构、循环结构等组合起来,然后完成单个知识点难以单独完成的复杂任务。

通过上文我们可以发现:循环嵌套可以类比为乐高积木,用不同的积木组合不用的东西。至于组合成什么,则取决于你的思考、实践,再思考和再实践,如此反复。

我们发现,其实世界上很多东西都是由不同的小模块组成的。知识也是这样,只有不断的积累、不断的实践,而其他的都交给时间就好了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档