wap建站教程,有项目没有钱怎么找投资人,网站建设常见问题处理,建设外贸网站费用文章目录 前言一、For each 循环二、offset 偏移三、Resize 属性四、Exit 语句五、DO...LOOP语句六、一些错误代码总结七、GOTO语句八、do while 和 do until九、如何在VBA内使用Excel工作表函数十、VBA使用随机数十一、排序总结 前言
VBA自学成柴的第三周 一、For each 循环 … 文章目录 前言一、For each 循环二、offset 偏移三、Resize 属性四、Exit 语句五、DO...LOOP语句六、一些错误代码总结七、GOTO语句八、do while 和 do until九、如何在VBA内使用Excel工作表函数十、VBA使用随机数十一、排序总结 前言
VBA自学成柴的第三周 一、For each 循环
for each 循环一般用于循环一个集合比如一个工作表一个工作簿或者是一个文件夹。
格式
for each a in 集合content
next遍历工作簿
Sub test()
Dim a as WorkBook
For Each a in WorkBooks内容
Next
End Sub遍历工作表
Sub test()
Dim a as WorkSheet
For Each a in WorkSheets内容
Next
End Sub遍历单元格(CurrentRegion)
Sub test()
Dim a as Range
for Each a in Range(a1).CurrentRegion内容
Next
End Sub遍历单元格(UsedRange)
Sub test()
Dim a as Range
for Each a in ActiveSheet.UsedRange内容
Next
End Sub案例将下列分数85分以上的分数变成红色
Sub test()
Dim a As Range
Dim lastrow As Long
找到数据的边界
lastrow Cells(Rows.Count, b).End(xlUp).Row
通过将列和行列连接
For Each a In Range(b2:b lastrow)If a.Value 85 Thena.Interior.ColorIndex 3End If
Next a
End Sub二、offset 偏移
以单元格为基准进行偏移返回单元格offset一共有两种偏移方式我就只记了一种。
格式 单元格.offset(行列) 从0开始符号 上负下正左负右正
实用案例给95分及以上的同学建一个新的工作表以他们的名字命名。
Sub test()
Dim a As Range
Dim lastrow As Byte
找到数据边界最后一行
lastrow Cells(Rows.Count, b).End(xlUp).Row
循环整个列用将列和行连接起来
For Each a In Range(Sheet3.[b35], b lastrow)If a.Value 95 Then这里使用偏移将b列左边的a列姓名列作为新表的名字newSheetName a.Offset(0, -1).Value 创建新的工作表Set NewSheet Sheets.Add(After:Sheets(Sheets.Count))将刚才定义的名字赋值给新表NewSheet.Name newSheetName将符合条件的单元格内容复制到新工作表这里因为是希望将整个表内容复制到新表中所以这里使用偏移定位到第一列然后使用resize重构这个数据集得到后面的数据。resize是后面的内容我直接提前用了。a.Offset(0, -1).Resize(1, 2).Copy NewSheet.Range(A1)End If
Next a
End Sub虽然代码有注释但是我还想总结一下 1.定位边界 2.循环数据集 3.利用offset偏移得到第一列的值并赋值 4.赋值给新列名称 5.利用offsetresizecopy将完整数据复制到新表中
三、Resize 属性
用于调整区域大小返回一个range对象该对象表示重新定义的区域。
格式
单元格.resize(新区域行数新区域列数) 从1开始案例将分数大于95分的同学全部标成红色
Sub test()
Dim a As Range
Dim lastrow As Byte
lastrow Cells(Rows.Count, b).End(xlUp).Row
For Each a In Range(b35:b lastrow)If a.Value 85 Then用offset偏移定位到第一列然后resize重构到1行2列,返回所有数据然后将所有数据变成红色a.Offset(0, -1).Resize(1, 2).Interior.ColorIndex 3End If
Next a
End Sub
四、Exit 语句
exit用于提前结束代码但是不能取代endend永远是老大哥在后面。
格式
exit do 只能写在do循环里面
exit for 只能写在for循环里面
exit sub 只能写在sub循环里面案例抽取前三个姓李的同学
Sub test()
Dim a, b, lastrow As Byte
lastrow Cells(Rows.Count, a).End(xlUp).Row
For a 35 To lastrowIf Left(Cells(a, A), 1) 李 ThenCells(a, B).Offset(0, -1).Resize(1, 2).Copy _Cells(Rows.Count, f).End(xlUp).Offset(1, 0)b b 1If b 3 ThenExit SubEnd IfEnd If
Next a
End Sub总结: 1.用left找到左边第一位是“李”的同学 2.offsetresizecopy 提取所有数据并赋值给f列 3.定位f列边界并且用offset向下偏移一行因为第一行是表头
五、DO…LOOP语句
DO LOOP无限循环语句,DO LOOP语句需要结合exit提前结束语句不然就会陷入无限循环当中直到机器死机。
格式
DO循环的内容
LOOP在循环到5的时候结束语句
Sub test()
Dim a as Byte
Do
nn1
If n 5 Then Exit Do
LOOP
End Sub六、一些错误代码总结
如果想忽略错误,继续运行在代码前面加
On Error Resume Next一些常见的错误代码
代码含义9数组下标超出范围13类型不匹配91对象变量未设置428对象不支持此属性或方法445对象不支持此操作53文件未找到76路径未找到91溢出0代码无错误当然这肯定不会弹出来
七、GOTO语句
跳转语句
格式
GOTO 66
其他内容
66:在代码中加入GOTO会在你类型出错的时候提醒你
Sub test()
...
因为这里运行两句话所以要在中间打上冒号。
If Err.Number 0 Then MsgBox 不好意思您输入的格式有误 : GoTo 66
... 如果出现错就不会执行中间的代码直接跳转到66后
66:
Err.Clear 记得清除报错信息
End Sub八、do while 和 do until
Do While loop 和 Do until loop 是有前提条件结束的Do循环语句。
格式
Do While 条件 条件成立才开始循环
循环内容
LOOP
-------------------------------
Do Until 条件条件成立才退出循环
循环内容
LOOP案例抽取前三个姓李的同学 Do While:
Sub test()
Dim a As Integer
Dim b, c As Byte
a 35
Do While b 3
If Left(Cells(a, A), 1) 李 ThenCells(a, b).Offset(0, -1).Resize(1, 2).Copy _Cells(Rows.Count, f).End(xlUp).Offset(1, 0)b b 1
End If
a a 1
Loop
End SubDo Until:
Sub test()
Dim a As Integer
Dim b, c As Byte
a 35
Do Until b 3
If Left(Cells(a, A), 1) 李 ThenCells(a, b).Offset(0, -1).Resize(1, 2).Copy _Cells(Rows.Count, f).End(xlUp).Offset(1, 0)b b 1
End If
a a 1
Loop
End Sub九、如何在VBA内使用Excel工作表函数
格式
application.WorksheetFunction.函数名例如求所有一年级同学的平均成绩
Sub test()
单元格 application.WorksheetFunction.averageif(年级列,一年级,成绩列)
End Sub十、VBA使用随机数
Rnd 返回一个小于1但大于或等于0的值
格式
Int((最大值 - 最小值 1) * Rnd 最小值)十一、排序
格式:
Sort(key1,order1,key2,type,order2,key3,order3.header,ordercustom,
matchcase,orientation,sortmethod,dataoption1,dataoption2,dataoption3)参数意义 key1,key2,key3,排序关键列至少使用一个key最多使用三重排序 order1order2order3排序模式默认升序 order1:xlAscending 代表key1升序简写 order 1:1order2:xlDescending 代表key2降序简写order2:2 type指定要排序的元素排序数据透视表的时候使用 header排序区域是否有表头 header:xlGuess你猜让软件辨认简写 header:0header:xlYes 有表头简写 header:1第一行不参与排序header:xlNo 没有表头简写 header:2第一行参与排序 案例对班级进行升序对成绩进行降序
Sub test()
Dim a As Range
Set a Range(a58).CurrentRegion
注意如果type没有使用的话要把type空出来
a.Sort Range(a58), 1, Range(c58), , 2, Header:1
End Sub总结
目前所学的VBA 循环类型
循环类型使用方法适用场景For for 变量 x to y 需要的操作next在已知循环次数的情况下适用于明确指定开始、结束和步长的循环For Each for each a in 集合 contentnext用于遍历集合如数组、集合、范围等适用于不知道循环次数但需要遍历集合的情况Do LoopDo 循环的内容 Loop适用于不知道循环次数的情况Do While Do While 条件 条件成立才开始循环 循环内容Loop在循环开始之前检查条件只有在条件为 True 时才执行循环Do Until Do Until 条件条件成立才退出循环 循环内容Loop在循环开始之前检查条件只有在条件为 False 时才执行循环
就这样。结束。