要求将该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
如果条件A成立,则执行B语句,适用于判断条件只有2个值得时候,可以省略end if
例如判断2是否大于1:
If 2 > 1 Then MsgBox True
如果条件A成立,则执行B语句,否则,执行C。适用于判断条件有两个值,且两个值都有输出。
例如判断1是否大于2
If 1 > 2 Then
MsgBox True
Else
MsgBox False
End If
适用于判断条件有多个值,且都有输出
例如判断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
与上一条差不多,适用于判断条件有多个值的时候
比如判断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
完整语句结构如下:
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
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
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
VBA中没有continue和break语句,可以用exit实现
比如:
Exit for结束当前for循环
Exit do 结束当前do循环
Exit sub 结束当前程序
强烈建议新手不要尝试该操作,就算是熟练了,也尽量不要使用goto语句。具体用法会在后期讲解。
实战开发1:简单贪吃蛇小游戏,要求实现如下效果
实战开发2:将文章开头的拆分工作表改写成拆分工作簿
联系客服