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

excel vba用dowhile循环求1到100的和-天天办公网

excel vba用dowhile循环求1到100的和-天天办公网

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用dowhile循环求1到100的和-天天办公网

  • 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用dowhile循环求1到100的和-天天办公网

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

excel vba用dowhile循环求1到100的和-天天办公网

首先我们需要用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用dowhile循环求1到100的和-天天办公网

  • 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用dowhile循环求1到100的和-天天办公网

解决省市匹配的问题 ,思路是一样的,只是用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用dowhile循环求1到100的和-天天办公网

  • 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用dowhile循环求1到100的和-天天办公网

  • 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用dowhile循环求1到100的和-天天办公网

  • 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用dowhile循环求1到100的和-天天办公网

excel vba用dowhile循环求1到100的和-天天办公网

明显可以看出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列的内容。

编者的话:写了两天终于写完了,自己也学了不少东西。那啥,求关注,求转发。关注后留言,可有机会定制属于自己的VBA 代码工具。