文科生自学VBA-循环类型总结和VBA中的VLookup
--人生不是赛场,梦想不容退场,学习编程成就更好的自己--
微软公司Office软件在商业办公领域一直占据着主流和主导地位,其中Excel在数据处理和分析领域有着强大的影响力,大部分人在经历几年职场历练后可以熟练的使用Excel函数和透视表功能,基本可以轻松完成绝大多数工作和任务。但实际上Office的强大和独特之处还在于VBA,因为VBA能够胜任好多个性化二次开发,减少重复机械劳动从而实现办公自动化,开发效率高且开发周期短,尤其对于Excel重度使用者来说会了VBA简直就是如虎添翼啊!!!
今天主要介绍两个VBA基础知识点:主要循环类型总结和VBA使用VLookup函数。循环遍历是编程思维的核心,VBA世界里有几种循环遍历类型,主要包括了For Next, Do While/Until和For Each Next,每个方式都有自己的语法特点和使用规则,大家根据实际情况进行合理选择;在Excel世界里VLookup函数占据着非常重要的地位,能够解决多表不同字段关联匹配的问题,几乎是Excel高手必须掌握的技能,如何在VBA里调用VLookup函数会在后半部分提及,下面开始正文。
首先看下面两个Sheet表数据情况:
DATA表如下:
INFO表如下:
循环总结部分:
根据INFO表中年龄界定范围来逐一判断DATA中每个人的人生阶段情况:
第一种循环总结-For Next
第二种循环总结-Do While Loop
第三种循环总结-Do Until Loop
第四种循环总结-For Each Next
在VBA中调用VLookup:
根据INFO表中ID爱好情况来逐一匹配DATA中每个人的爱好情况:
关键点一定使用Application.VLookup才可以调用成功,参数设置都是跟函数VLookup一样,是不是一点也不难哦?
代码汇总如下:
Sub Judge_Age_Period_Next() '利用For Next循环进行判断Application.ScreenUpdating = FalseSheets('DATA').SelectDim i As Long, lr As Long '定义两个长整数型数值lr = ActiveSheet.UsedRange.Rows.Count '获取当前工作表的最大行数For i = 2 To lr Step 1 '以步长为1的方式向下遍历循环判断 If Range('D' & i) <= 3 Then Range('E' & i) = '婴儿' ElseIf Range('D' & i) <= 18 Then Range('E' & i) = '少年' ElseIf Range('D' & i) <= 35 Then Range('E' & i) = '青年' ElseIf Range('D' & i) <= 50 Then Range('E' & i) = '中年' Else: Range('E' & i) = '老年' End IfNext iApplication.ScreenUpdating = TrueEnd SubSub Judge_Age_Period_While() '利用While Loop循环进行判断Application.ScreenUpdating = FalseSheets('DATA').SelectDim i As Long '定义一个长整数型数值i = 2 '定义起始点数值Do While Range('D' & i) <> '' '定义何种情况执行循环 If Range('D' & i) <= 3 Then Range('F' & i) = '婴儿' ElseIf Range('D' & i) <= 18 Then Range('F' & i) = '少年' ElseIf Range('D' & i) <= 35 Then Range('F' & i) = '青年' ElseIf Range('D' & i) <= 50 Then Range('F' & i) = '中年' Else: Range('F' & i) = '老年' End Ifi = i + 1 '定义步长向下循环遍历LoopApplication.ScreenUpdating = TrueEnd SubSub Judge_Age_Period_Until() '利用Until Loop循环进行判断Application.ScreenUpdating = FalseSheets('DATA').SelectDim i As Long '定义一个长整数型数值i = 2 '定义起始点数值Do Until Range('D' & i) = '' '定义何种情况执行循环 If Range('D' & i) <= 3 Then Range('G' & i) = '婴儿' ElseIf Range('D' & i) <= 18 Then Range('G' & i) = '少年' ElseIf Range('D' & i) <= 35 Then Range('G' & i) = '青年' ElseIf Range('D' & i) <= 50 Then Range('G' & i) = '中年' Else: Range('G' & i) = '老年' End Ifi = i + 1 '定义步长向下循环遍历LoopApplication.ScreenUpdating = TrueEnd SubSub Judge_Age_Period_Each() '利用Each Next循环进行判断Application.ScreenUpdating = FalseSheets('DATA').SelectDim i As Long, rng As Range '定义一个长整数型数值和Range对象i = 2 '定义起始点数值For Each rng In Range('H2:H12') '定义循环范围 If Range('D' & i) <= 3 Then Range('H' & i) = '婴儿' ElseIf Range('D' & i) <= 18 Then Range('H' & i) = '少年' ElseIf Range('D' & i) <= 35 Then Range('H' & i) = '青年' ElseIf Range('D' & i) <= 50 Then Range('H' & i) = '中年' Else: Range('H' & i) = '老年' End Ifi = i + 1 '定义步长向下循环遍历NextApplication.ScreenUpdating = TrueEnd SubSub Find_Match_VLP() '利用Vlookup匹配数据Application.ScreenUpdating = FalseSheets('DATA').SelectDim i As Long, lr As Long '定义两个长整数型数值lr = ActiveSheet.UsedRange.Rows.Count '获取当前工作表的最大行数For i = 2 To lr Step 1 '以步长为1的方式向下遍历循环判断 '通过Vlookup进行匹配数据 Range('I' & i) = Application.VLookup(Range('A' & i), Worksheets('INFO').Range('D:E'), 2, 0)Next iApplication.ScreenUpdating = TrueEnd Sub
VBA其实并不难,只要肯下点功夫就可以熟练掌握和运用,大家赶紧试一试吧!!!
END
我为人人,人人为我!!欢迎大家关注,点赞和转发!!!
~~人生不是赛场,梦想不容退场~~不断努力学习蜕变出一个更好的自己,不断分享学习路上的收获和感悟帮助他人成就自己!!!