EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )



作者:靛蓝工作室 2018-04-19 07:00:00

在使用VBA表格出来程序的时候,最核心的逻辑有两点,一是循环,二是判断语句。一般要么是循环里面嵌套判断语句,要么就是判断语句里面嵌套判断语句。更复杂点的就是嵌套里面既有循环还有判断。今天重点通过一个小小的例子,说明一下VBA中的常见的五种循环语句。

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

For ....next,

Do while ....loop,

Do ....loop until,

While... wend,

For each... in .. Next,

其中我最常用的是 For ....next ,Do while ....loop。

Do ....loop until,While... wend,这两个基本上都可以被写成 For ... Next, Do while ....loop的形式。

For each... in .. Next 主要是遍历元素集合,比如数组,对象,文件什么。

初学者最好先掌握好For Next 和Do While ... loop,然后再学一下 IF ... Then ..的判断语句。就基本上可以应对大部分EXCEL表格处理的问题了,至少模拟一下EXCEL自带的公式是绰绰有余了。

今天通过解决一个小问题来学习一下这五种循环。

问题:通过编写VBA匹配生产企业中的省市名称。比如要提取A列“中山市花城食品饮料有限公司”中的地级市名称“中山”两字到B列中,如下图:

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

  • 1、For…Next 循环,

当你知道你需要重复运行多少次某段语句时,可以使用For…Next语句。它的语法如下:

For 计数器 = 开始 To 结束 [步长]

语句1

语句2

语句N

Next [计数器]

比如计算2到100之间所有偶数之和,就可以这样写:

Sub 求和()

Dim Sum As Integer

For i = 2 To 100 Step 2

Sum = Sum + i

Next

MsgBox Sum

End Sub

将 i= 2 改为 i = 2, step 2改为 step 1(若步长为1 step 1 可以省略) 就是计算1加到100的和。

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

解决省市匹配的问题 如图:

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

首先我们需要用for循环读取要查找的企业名称,A列从第2行到第33行:

Dim strName as Sring

for i = 2 to 33

strName = cells(i,1)

next

然后我们需要用for循环读取被查找的广东省的省市地址关键词,C列从第2行到第23行:

Dim strAddr as Sring

for j =2 to 23

strAddr = cells(j,1)

next

再次我们需要在企业名称里面(strName)查找广东省的省市地址关键词(strAddr),我们需要用到

Instr()这个函数。加上判断语句是这样的:

IF Instr(strName,strAddr) > 0 Then

Cells(i,2)=strAddr

End IF

最后我们将我们的代码汇总下:

Sub 提取企业名称省市()

For i = 2 To 33

strName = Cells(i, 1)

For j = 2 To 23

strAddr = Cells(j, 3)

If InStr(strName, strAddr) > 0 Then

Cells(i, 2) = strAddr

End If

Next

Next

End Sub

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

  • Do…While循环 

如果不知道循环多少次,可以用Do ..while循环 只要或者直到某个条件为真,它们就会重复一系列的语句。语法如下:

Do While 条件

语句1

语句2

语句N

Loop

或者也可以写成第二种写法:

Do

语句1

语句2

语句N

Loop While 条件

第二种写法循环体内的代码至少会运行一次。

比如刚才的计算2到100之间所有偶数之和,就可以这样写:

Sub 求和2()

Dim Sum As Integer

i =2 

Do While i <=100

Sum = Sum + i

Next

MsgBox Sum

End Sub

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

解决省市匹配的问题 ,思路是一样的,只是用Do while 循环代替了For 循环。

首先我们需要用Do While循环读取要查找的企业名称,A列从第2行到第33行:

Dim strName as Sring

i = 2

Do While Cells(i, 1) <> ""

strName = Cells(i, 1)

i=i+1

Loop

然后我们需要用Do While循环读取被查找的广东省的省市地址关键词,C列从第2行到第23行:

Dim strAddr as Sring

j = 2

Do while cells(j,3)<>""

strAddr = cells(j,3)

next

再次我们需要在企业名称里面(strName)查找广东省的省市地址关键词(strAddr),我们需要用到

Instr()这个函数。加上判断语句是这样的:

IF Instr(strName,strAddr) > 0 Then

Cells(i,2)=strAddr

End IF

最后我们将我们的代码汇总下:

Sub 提取企业名称省市W()

i = 2

Do While Cells(i, 1) <> ""

strName = Cells(i, 1)

j = 2

Do While Cells(j, 3) <> ""

strAddr = Cells(j, 3)

If InStr(strName, strAddr) > 0 Then

Cells(i, 2) = strAddr

End If

j = j + 1

Loop

i = i + 1

Loop

End Sub

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

  • Do ...Loop Until循环

可以解释为不满足 Until的条件时,执行循环体内的语句:

Do Until 条件

语句1

语句2

语句N

Loop

也可以讲 Until放在后面,这样循环体内的语句至少执行一次:

Do Until 条件

语句1

语句2

语句N

Loop

计算2到100之间所有偶数之和,就可以这样写:

Sub 求和3()

i = 2

Dim Sum As Integer

Do Until i > 100

Sum = Sum + i

i = i + 2

Loop

MsgBox Sum

End Sub

解决省市匹配的问题,代码如下:

Sub 提取企业名称省市D()

i = 2

Do Until Cells(i, 1) = ""

strName = Cells(i, 1)

j = 2

Do Until Cells(j, 3) = ""

strAddr = Cells(j, 3)

If InStr(strName, strAddr) > 0 Then

Cells(i, 2) = strAddr

End If

j = j + 1

Loop

i = i + 1

Loop

End Sub

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

  • While Wend循环

While…Wend循环功能上和Do…While循环一样,它是从Microsoft Basic的早期版本遗留下来的并

且VBA保留它也是为了支持兼容性。该循环以关键字While开始以关键字Wend结束。这是它的语法:

While 条件

语句1

语句2

语句N

Wend

条件在循环的上面就被测试,只要提供的条件为真,这些语句就会被执行。一旦条件为假,VB就将

退出该循环。

计算2到100之间所有偶数之和,就可以这样写:

Sub 求和4()

i = 2

Dim Sum As Integer

While i<= 100

Sum = Sum + i

i = i + 2

Wend

MsgBox Sum

End Sub

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

  • For Each…Next 循环

当你的过程需要在一个集合的所有对象或者一个数组的所有元素(数组将在第七章里涉及)之间循

环时,应该使用For Each…Next循环。该循环不需要计数器变量,VB自己知道应该执行几次循环。

该循环的形式是:

For Each 元素 In 组合

语句1

语句2

语句N

Next [元素]

比如简单的求和计算:

Sub 求和5()

Dim Num() As Variant

Num = Array(1, 2, 3, 4, 5)

Dim Sum As Integer

For Each N In Num

Sum = Sum + N

Next

MsgBox Sum

End Sub

其中Num 为数组,For Each N In Num 时读取数组里的每一个数值,然后执行循环体内的语句。

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

EXCEL VBA 零基础教程:最全的循环语句(办公室 职场必备 )

明显可以看出For Next 循环要比其他Do while Loop 或 While Wend 代码要简洁一些,但需要提前知道循环的起点和终点。Do while Loop 或 While Wend用好的关键需要控制好循环的入口和出口,避免进入死循环。Do While Loop,Do Until Loop 和 While Wend 从对比图中可以看出循环控制流程基本一致。

注1:Instr 用法:InStr([start,]string1,string2[,compare])

参数说明

  • Start - 一个可选参数。指定搜索的起始位置。搜索从第一个位置开始,从左到右。
  • String1 - 必需的参数。要搜索的字符串。
  • String2 - 必需的参数。要在String1中搜索的字符串。
  • Compare - 一个可选参数。指定要使用的字符串比较。它可以采取以下提到的值:
  • 0 = vbBinaryCompare - 执行二进制比较(默认)
  • 1 = vbTextCompare - 执行文本比较

注2: Cells用法: Cells(i,j)中i指的是行数,j指的是列数,Cells(i,j)指的是第i行的第j列单元格。Cells(3,4)代表第3行D列的内容。


0