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

这是免费教程《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.总结

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

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

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

推荐:人人都需要的数据分析思维

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值