打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA基础 | 以拆分工作表为例讲解VBA中的判断与循环



要求将该sheet中的所有记录分开,每条记录分到一个sheet中,并将sheet名称命名为债券名称,格式如下


另外,如果现价为0,大概率是因为该债券已经不存在,所以还要剔除掉现价为0的记录。可以参考如下代码:

Sub spr()
    Dim y As Integer    '定义整型变量y记录原始表行数
    Dim x As Integer    '定义整型变量x记录原始表列数
    Dim n As Integer    '定义整型变量n用于循环
    Dim stName As String
    x = Range('a65536').End(xlUp).Row
    y = Range('az1').End(xlToLeft).Column
    
    For n = 2 To y  'n 从2到y循环
        If Range('c' & n) <> 0 Then '判断剔除现价为0的
            stName = Range('a' & n)
            Sheets.Add After:=Sheets(Sheets.Count)  '在最后新增sheet
            Sheets(1).Select    '新增后回自动激活新工作表
            Range('1:1' & ',' & n & ':' & n).Select '选中第一行和数据行
            Selection.Copy  '复制选中内容
            Sheets(Sheets.Count).Select '激活新增的sheet
            Sheets(Sheets.Count).Name = stName  '更改sheet名
            Range('A1').Select
            Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
                False, Transpose:=True  '转制粘贴
            Sheets(1).Select    '回到主表
        End If
    Next n
End Sub


其中最主要的语句结构就是for和if,要理解这段代码,我们需要先了解vba总的主要判断和循环结构。




判断

1


1、if A Then B

如果条件A成立,则执行B语句,适用于判断条件只有2个值得时候可以省略end if

例如判断2是否大于1:

If 2 > 1 Then MsgBox True



2、if A Then B else C

如果条件A成立,则执行B语句,否则,执行C。适用于判断条件有两个值,且两个值都有输出。

例如判断1是否大于2

If 1 > 2 Then
    MsgBox True
Else
    MsgBox False
End If



3、if A Then B elseif C elseif D……

适用于判断条件有多个值,且都有输出

例如判断0.5在哪个整数区间内

Dim a
a = 0.5
If a > 3 Then
    MsgBox '超过3'
ElseIf a > 2 Then
    MsgBox '在2到3之间'
ElseIf a > 1 Then
    MsgBox '在1到2之间'
ElseIf a > 0 Then
    MsgBox '在0到1之间'
End If



4、Select … case

与上一条差不多,适用于判断条件有多个值的时候

比如判断3.12取整是多少

Dim a
a = 3.12
Select Case Int(a)
    Case 0
        MsgBox 0
    Case 1
        MsgBox 1
    Case 2
        MsgBox 2
    Case 3
        MsgBox 3
End Select







循环

2



1、for … next

完整语句结构如下:

For<</span>循环变量>=<</span>初值> to <</span>终值> [step步长,默认为1]

   <</span>循环体>

   [exit for]  ‘跳出循环触发语句,执行next后的语句

   [循环体] 

Next [循环变量,变量名可省略]

比如求1到10得累和

Dim a As Byte
Dim result As Byte
For a = 1 To 10
    result = result a
Next
MsgBox result



需要注意得是,在集合(collection)中,<</span>循环变量>=<</span>初值> to<</span>终值>,也可以写成each<</span>循环变量> in <</span>集合>

Dim sht As Worksheet
For Each sht In ThisWorkbook.Worksheets
    MsgBox sht.Range('b2')
Next


此外,如果步长为负数(比如step -1),则逆向循环

比如

Dim a As Integer
For a = 99 To 1 Step -33
    Debug.Print a
Next a



2、Do…While

Do [while逻辑表达式]  

   <</span>循环体>

   [exit do] ‘跳出循环,执行loop后的语句

   [循环体]

   [循环体]

Loop 

注意loop不可少,是结束标志

同样用其求1到10的累和

Dim a As Integer
Dim result As Integer
a = 0
Do While a < 10
    a = a 1
    result = result a
Loop
MsgBox result



3、Do Until语句

Do [until逻辑表达式]    ‘当条件满足时,退出,直到型

 <</span>循环体>

 [exit do]

Loop

同上例,写法如下:

Dim a As Integer
Dim result As Integer
a = 0
Do Until a > 9  '注意此处小于变成了大于
    a = a 1
    result = result a
Loop
MsgBox result





跳出

3



1、用exit跳出循环

VBA中没有continue和break语句,可以用exit实现

比如:

Exit for结束当前for循环

Exit do 结束当前do循环

Exit sub 结束当前程序


2、用goto跳出循环

强烈建议新手不要尝试该操作,就算是熟练了,也尽量不要使用goto语句。具体用法会在后期讲解。

 

实战开发1:简单贪吃蛇小游戏,要求实现如下效果



实战开发2:将文章开头的拆分工作表改写成拆分工作簿

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
excel vba常见问题解答
vba中冒号的作用
VBA学习资料
第二章、Excel工作薄和工作表操作
VBA基本语言结构
Access教程 第八章 使用VBA编程
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服