For语句

2020-07-28 10:58:20 浏览数 (1)

计算机擅长做重复、重复又重复的事,它不知道疲惫。For语句就是一种循环语句,再一次罗嗦一次,在VBA编辑器里插入模块,随便写个For,按F1,先看看官方的帮助文件。

照搬一下帮助文件:

代码语言:javascript复制
For counter = start To end [ Step step ]
    [ statements ]
    [ Exit For ]
    [ statements ]
Next [ counter ]

中括号内的代表是可以省略的语句。

还是拿实际例子来说,上一讲If语句我们判断数字奇偶是一个一个判断的,这次加上循环:

代码语言:javascript复制
Sub TestFor()
    Dim i As Long
    Dim rngA As Range
    Dim rngB As Range
    
    For i = 1 To 100 Step 1
        Set rngA = Range("A" & VBA.CStr(i))
        Set rngB = Range("B" & VBA.CStr(i))
        
        If rngA.Value Mod 2 = 0 Then
            If rngA.Value > 5 Then
                rngB.Value = "大于5的偶数"
            Else
                rngB.Value = "小于5的偶数"
            End If
        Else
            rngB.Value = "奇数"
        End If
    Next i
End Sub

1、定义变量

在“变量与数据类型”里,我们讲过变量,For语句里的counter,我们定义了一个i变量,因为在程序里,它是需要变化的。

定义了2个Range,目的是为了方便操作,因为这2个单元格在每一次的循环内部,被多次使用了,如果用Range("A" & VBA.CStr(i))这种模式,书写起来麻烦,注意Range这种对象是用Set才能赋值的,这种是引用类型;其他数值、String等值类型的是使用Let,但一般都省略。

定义了变量后,在使用的地方就可以直接用我们书写的变量名,命名有一定的规则,不能数字开头等。这里建议命名也要具有一定的特点,比如rngA,这样你一看就大概能知道是Range类型了。当然只要是符合规则的都是可以运行的,但良好的习惯有助于自己学习。

2、循环

我们程序里用的start是1,即变量i开始的数字,end为100,这是因为我们已经在Excel里看到了起始行号(显然真正写程序不可能这样,这里只是演示)。

  • [ Step step ]的意思是按多大的数字增长,省略的话是1。
  • Next [ counter ]的意思是执行完了一次循环,进入下一次,这个时候,它会把变量i,加上step,再与end做对比,一旦超过了end,循环也就结束了。
  • [ Exit For ]是一种可以让我们控制退出循环的语句,如果在循环过程中,满足了什么条件,由我们自己来退出循环,而不必等到counter大于end

注意:以上解释是假设step是正数的情况,负数的话就相反了。step也可以写小数!不过会被自动五舍六入(VBA里5是被舍掉的!)。

如果你看了帮助文件,应该知道还有一种For Each的用法,那个这里就不举例了,自己可以研究研究。

3、其他

程序中有个这种语句"A" & VBA.CStr(i),显然我们是为了构建A5、A6这种单元格地址的形式。

&符号是一种连接符号,表示把前后2个东西拼接在一起,只能用在字符类型上,和上一讲的比较符号差不多,是具有特殊含义的符号。

里面的VBA.CStr(i)的意思是把数值类型(程序中用的是Long)i转换为字符,其实在VBA里不用VBA.CStr这个转换函数话,也是一样的,这是因为VBA会帮我们做转换。

这里也建议大家要养成好的习惯,要清楚自己正在操作的是什么数据类型,需不需进行转换,要转换的话别依赖VBA的帮助,这对编程的一些原理理解是非常重要的。

VBA.CStr(xxxxx)这个函数的功能看名字大概也能猜到,conver to string,就是把某种数据类型的东西,转换为String类型。VBA.这个是可以不写的,我习惯写上,如果记得第一个程序里说过的那个“.”,应该知道这样编辑器能够给我们提示,方便输入。

动图中还有一个插入按钮的操作,这也是一种运行程序的方法,只要把程序名称指定给了某个按钮,鼠标点击一下就可以运行程序了。

4、小结

如果你学会了For循环,是不是感觉自己写的程序一下子就像模像样了,忍不住会按按钮多运行几次。以前我是有这种感觉的,看着自己写的程序能一下操作那么多单元格,真是觉得满足。

0 人点赞