Sub test() Dim s As Workbook ForEach s In workbooks '循环工作簿 MsgBox s.Name Next EndSub
Sub test() Dim s As Worksheet ForEach s In worksheets '循环工作表 MsgBox s.Name Next EndSub
Sub test() Dim s As Range ForEach s In Range("a1:f14") '循环单元格 MsgBox s Next EndSub
Sub test() Dim s As Range ForEach s In Selection '循环选择区域单元格 MsgBox s Next EndSub
Sub test() Dim s As Range ForEach s In Sheets("2").UsedRange '在工作表2中循环自动选择区域单元格 MsgBox s Next EndSub
Sub test() Dim ss as Range,n% ForEach ss In Range(Sheet1.[b2],Sheet1.Cells(Rows.Count,2).End(xlUp)) n = n + 1 If ss.value= "男"Then Worksheets.Add(after:=Sheets(Sheets.Count)).Name = Sheet1.Cells(n+1,n) Next EndSub
1.11 偏移
以一个单元格为基准,进行偏移,返回的是单元格
编写格式
单元格.offset(偏移行,偏移列)
从0开始(本单元格的行列号为0起算)
上负下正
单元格(偏移行,偏移列)
从1开始
左负右正
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Sub test() Range("a1").Offset(8,4).Select'以(8,4)单元格为原点(0,0)偏移) EndSub
Sub test() Range("a1")(8,4).Select'向左偏移了8向下移动了4(不包括本单元) EndSub
Sub test() Dim ss as Range ForEach ss In Range(Sheet1.[b2],Sheet1.Cells(Rows.Count,2).End(xlUp)) n = n + 1 If ss.value= "男"Then Worksheets.Add(after:=Sheets(Sheets.Count)).Name = Sheet1.Cells.Offset(0,-1) Next EndSub
1.12 Resize用法
调整指定选择区域的大小,返回range对象,该对象表示重新定义的区域
格式:单元格.resize(新区域行数,新区域列数) 从1开始
例子
1 2 3 4 5 6 7 8 9 10 11 12
Sub test() Range("a5","c10").Resize(8,5).Select EndSub
Sub test() Dim ss As Range ForEach ss In Range("c2",Cells(Rows.Count,3).End(xlUp)) If ss.value < 60Then ss.Offset(0,-2).Resize(1,3).Interior.ColorIndex = 35'向左偏移了1个单元格后将选定的1个单元格改为1行1列单元格 EndIf Next ss EndSub
1.13 结束语句Exit
编写格式
Exit Do
只能写在DO循环里面
Exit For
只能写在FOR循环里面
Exit Sub
只能写在sub子过程里面
例子
1 2 3 4 5 6 7 8 9
Sub test() For i =1To10 If i = 5Then ExitFor Else msgbox i EndIf Next i EndSub
1.14 DO LOOP
无限循环语句
编写格式:DO 循环内容…… LOOP
例子
1 2 3 4 5 6 7 8
Sub test() OnErrorResumeNext'当代码运行错误时忽略,继续向下运行 Do n = n + 1 if n = 5ThenExitDo MsgBox n Loop EndSub
1.15 GOTO
跳转语句
编写格式:GOTO 1000 .其他内容 100:
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Sub test() Dim n AsDate OnErrorResumeNext'当代码运行错误时忽略,继续向下运行 Do n = InputBox("输入我的生日(yyyy/mm/dd)") If Err.number <> 0Then MsgBox "你输入的格式有误!!":GoTo100 If n =[d1] Then MsgBox "回答正确,爱你哦,么么哒" ExitDo Else MsgBox "你连我的生日都忘了,你完蛋了,重新回答 End IF 100: Err.Clear Loop End Sub
1.16 Do While loop与 Do Until loop
编写格式:Do While条件(成立才循环) 循环内容 LOOP Do Until条件(成立退出循环) 循环内容 LOOP
一、四舍五入 Sub a() Dim i, j i = 3.1415926 j = Excel.Application.WorksheetFunction.Round(i, 2) MsgBox j EndSub
二、统计数量(多张工作表,用for循环,sheet(i)) Sub a() Dim a a = Excel.Application.WorksheetFunction.CountA(Range("A:A")) - 1 MsgBox a EndSub
三、条件计数 Sub a() Dim i, a, b, c, x, y For i = 2To Sheets.Count Set x = Sheets(i).Range("A:A") Set y = Sheets(i).Range("B:B") With Excel.Application.WorksheetFunction a = a + .CountA(x) - 1 b = b + .CountIf(y, "男") c = c + .CountIf(y, "女") EndWith Next Range("B1") = a Range("B2") = b Range("B3") = c EndSub
四、VLOOKUP Sub a() OnErrorResumeNext Dim j, i j = 2 DoWhile Range("A" & j) <> 0 For i = 2To Sheets.Count Range("B" & j) = Excel.Application.WorksheetFunction.VLookup(Range("A" & j), Sheets(i).Range("A:B"), 2, 0) Next j = j + 1 Loop EndSub
拓展:考生成绩统计&查询系统 Sub 查询() OnErrorResumeNext Dim i, a, b, c Sheets("汇总").Range("D14").ClearContents For i = 2To Sheets.Count With Excel.Application.WorksheetFunction Set a = Sheets("汇总").Range("D9") Set b = Sheets(i).Range("A:H") Set c = Sheets("汇总") c.Range("D14") = .VLookup(a, b, 5, 0) '姓名 c.Range("D16") = .VLookup(a, b, 6, 0) '性别 c.Range("D18") = .VLookup(a, b, 3, 0) '专业类 c.Range("D20") = .VLookup(a, b, 8, 0) '总分 '在哪张表上找到数据就显示他的表名 c.Range("D22") = Sheets(i).Name '如果汇总表的D14姓名不为空时就停止循环 If c.Range("D14") <> ""Then ExitFor EndIf EndWith Next EndSub
Sub 统计() Dim i, a, b For i = 2To Sheets.Count With Excel.Application.WorksheetFunction Set a = Sheets("汇总") Set b = Sheets(i) a.Range("D26") = .CountA(b.Range("A:A")) - 1 a.Range("D27") = .CountIf(b.Range("F:F"), "男") a.Range("D28") = .CountIf(b.Range("F:F"), "女") EndWith Next EndSub