'VBA语句
'一、宏程序语句(运行后可以弯沉一个功能)
'1. 在单元格A1中输入100
Sub test() '开始语句
Range("a1") = 100
End Sub '结束语句
'2. 录制宏(将当前光标所选中的单元格内容复制到单元格B9中)
Sub copy()
Selection.Copy
Range("B9").Select
ActiveSheet.Paste
End Sub
'3. 录制宏(删除单元格A1中的内容)
Sub delete()
Range("A1").Select
Selection.ClearContents
End Sub
'二、函数程序语句(运行后可以返回一个值)
Function shcount()
shcount = Sheets.Count
End Function
'三、在程序中应用的语句
'1. 调用test
Sub test2()
Call test '调用test语句
End Sub
'2. 第一列的前100行等于1到100
Sub test3()
For x = 1 To 100 'for next 循环语句
Cells(x, 1) = x
Next x
End Sub
'变量的存活周期
'1. 过程级变量:过程结束,变量值释放
'2. 模块级变量:变量的值只在本模块中保持,工作簿关闭时随时释放
'3. 全局级变量: 在所有的模块中都可以调用,值会保存到EXCEL关闭时才会被释放。
'变量的释放
'1. 一般情况下,过程级变量在过程运行结束后就会自动从内存中释放
'2. 只有一些从外部借用的对象变量才需要使用set 变量=nothing进行释放。
'VBA对象
'VBA中的对象其实就是我们操作的具有方法、属性的excel中支持的对象
'Excel中的几个常用对象表示方法
'1、工作簿
' Workbooks 代表工作簿集合,所有的工作簿,Workbooks(N),表示已打开的第N个工作簿
' Workbooks ("工作簿名称")
' ActiveWorkbook 正在操作的工作簿
' ThisWorkBook '代码所在的工作簿
'2、工作表
'Sheets("工作表名称")
'Sheet1 表示第一个插入的工作表,Sheet2表示第二个插入的工作表....
'Sheets(n) 表示按排列顺序,第n个工作表
'ActiveSheet 表示活动工作表,光标所在工作表
'worksheet 也表示工作表,但不包括图表工作表、宏工作表等。
'3、单元格
'cells 所有单元格
'Range ("单元格地址")
'Cells(行数,列数)
'Activecell 正在选中或编辑的单元格
'Selection 正被选中或选取的单元格或单元格区域
'VBA属性
'VBA属性就是VBA对象所具有的特点
'表示某个对象的属性的方法是: 对象.属性=属性值
'1. 单元格A1的值等于100
Sub ttt()
Range("a1").Value = 100 '单元格的值
End Sub
'或者:
Sub ttt()
Dim rg As Range '定义Range对象rg
Set rg = Range("a1")
rg = 100
End Sub
'2. 将第一个工作表改为“工作表1”
Sub ttt1()
Sheets(1).Name = "工作表1" '工作表的名称
End Sub
'3. 将工作表sheet2中单元格A1的值改为“abcd”
Sub ttt2()
Sheets("Sheet2").Range("a1").Value = "abcd" '工作表中单元格的值
End Sub
'4. 将单元格A2填充为红色
Sub ttt3()
Range("A2").Interior.ColorIndex = 3 '单元格的内部填充色
End Sub
'VBA方法
'VBA方法是作用于VBA对象上的动作
'表示用某个方法作用于VBA的对象上,可以用下面的格式:
'1. 将单元格A1的值复制到A2
Sub ttt4()
Range("A1").Copy Destination:= Range("A2") 'Destination:=可以省略
End Sub
'2. 将sheet2放在sheet1后面
Sub ttt5()
Sheet1.Move before:=Sheets("Sheet2")
End Sub
'判断语句
'一、IF判断
'1. 判断单元格A1的值,若大于0则单元格B1的值为“正数”,否则为“负数或0”
Sub judge1() '单条件判断
If Range("a1").Value > 0 Then
Range("b1") = "正数"
Else
Range("b1") = "负数或0"
End If
End Sub
'2. 若单元格A1的值大于0则B1的值为“正数”,等于0为“等于0”,否则为“负数”
Sub judge2() '多条件判断
If Range("a1").Value > 0 Then
Range("b1") = "正数"
ElseIf Range("a1") = 0 Then
Range("b1") = "等于0"
ElseIf Range("B1") <= 0 Then
Range("b1") = "负数"
End If
End Sub
'3. 若单元格A1和A2的值不为空值,则A3=A1*A2
Sub judge3()
If Range("a1") <> "" And Range("a2") <> "" Then
Range("a3") = Range("a1") * Range("a2")
End If
End Sub
'4. 区间判断:若A2<=1000,则B2=0.01;若1000<A2<=3000,则B2=0.03;若A2>3000,则B2=0.05
Sub scope()
If Range("a2") <= 1000 Then
Range("b2") = 0.01
ElseIf Range("a2") <= 3000 Then
Range("b2") = 0.03
ElseIf Range("a2") > 3000 Then
Range("b2") = 0.05
End If
End Sub
'二、IIF判断
'1. 若A1小于等于0,则A3等于“负数或零”,否则等于“负数”
Sub 判断4()
Range("a3") = IIf(Range("a1") <= 0, "负数或零", "负数")
End Sub
'三、select判断
'1. 若单元格A1的值大于0,则B1等于“正数”,否则等于“负数或0”
Sub 判断1() '单条件判断
Select Case Range("a1").Value
Case Is > 0
Range("b1") = "正数"
Case Else
Range("b1") = "负数或0"
End Select
End Sub
'2. 若单元格A1的值大于0,则B1等于“正数”,等于0则B1等于“0”,否则等于“0”
Sub 判断2() '多条件判断
Select Case Range("a1").Value
Case Is > 0
Range("b1") = "正数"
Case Is = 0
Range("b1") = "0"
Case Else
Range("b1") = "负数"
End Select
End Sub
'3. 若A3的值小于“G”,则
Sub 判断3()
If Range("a3") < "G" Then
MsgBox "A-G"
End If
End Sub
'4. 区间判断:若0<=A2<=1000,则B2=0.01;若1001<=A2<=3000,则B2=0.03;若A2>3000,则B2=0.05
Sub scope()
Select Case Range("a2").Value
Case 0 To 1000
Range("b2") = 0.01
Case 1001 To 3000
Range("b2") = 0.03
Case Is > 3000
Range("b2") = 0.05
End Select
End Sub
'循环语句
'1. D列的值等于B列乘以C列(前10行)的4种实现方法:
'方法1:
Sub t1()
Dim x As Integer '定义整数变量x
For x = 2 To 10 Step 1
Range("d" & x) = Range("b" & x) * Range("c" & x)
Next x
End Sub
'方法2:
Sub t2()
Dim rg As Range
For Each rg In Range("d2:d10")
rg = rg.Offset(0, -2) * rg.Offset(0, -1)
Next rg
End Sub
'方法3:
Sub t3()
Dim x As Integer
x = 1
Do
x = x + 1
Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
Loop Until x = 10
End Sub
'方法4:
Sub t5()
x = 1
Do While x < 10
x = x + 1
Cells(x, 4) = Cells(x, 2) * Cells(x, 3)
Loop
End Sub
'2. 将A1:B7和D5:E9区域中的空值更改为0
Sub s1()
Dim rgg As Range
For Each rgg In Range("a1:b7,d5:e9")
If rgg = "" Then
rgg = 0
End If
Next rgg
End Sub
'3. 若第一列相邻两行之间的差值不等于1,则在第二列相应位置输入“断点”(前10行)
Sub s2()
Dim x As Integer
x=0
Do
x = x + 1
If Cells(x + 1, 1) <> Cells(x, 1) + 1 Then
Cells(x, 2) = "断点"
Exit Do
End If
Loop Until x = 11
End Sub
'函数与公式
'一、用VBA在单元格中输入普通公式
'1. 实现D2=B2*C2
Sub t1()
Range("d2") = "=b2*c2"
End Sub
'2. 实现第四列等于B列*C列(2到6行)
Sub t2()
Dim x As Integer
For x = 2 To 6
Cells(x, 4) = "=b" & x & "*c" & x
Next x
End Sub
'二、用VBA在单元格输入带引号的公式
'1. 将A列中“B”对应的B列的值求和(2到6行)
Sub t3()
Range("c16") = "=SUMIF(A2:A6,""b"",B2:B6)" '遇到双引号就把双引号加倍
End Sub
'三、用VBA在单元格中输入数组公式
'1. 将数组B2:B6和C2:C6的积求和
Sub t4()
Range("c9").FormulaArray = "=SUM(B2:B6*C2:C6)" '不需要在公式中加{}
End Sub
'四、利用单元格公式返回值
'1. 用Evaluate直接计算出公式的值
Sub t5()
Range("d16") = Evaluate("=SUMIF(A2:A6,""b"",B2:B6)")
Range("d9") = Evaluate("=SUM(B2:B6*C2:C6)")
End Sub
'五、借用工作表函数
'1. 统计A列中出现“B”的总次数(前10行)
Sub t6()
Range("d8") = Application.WorksheetFunction.CountIf(Range("A1:A10"), "B")
End Sub
'六、利用VBA函数
'1. 在单元格C20中返回A20中“E”出现的位置
Sub t7()
Range("C20") = VBA.InStr(Range("a20"), "E") '字符串查找,类似于工作表函数find
End Sub
'七、编写自定义函数
“1. 返回当前工作表的名称
Function wn()
wn = Application.Caller.Parent.Name
End Function
'END语句和Exit语句
'End作用:强制退出所有正在运行的程序
'Exit作用:退出指定的语句
'1、Exit Sub
Sub e1()
Dim x As Integer
For x = 1 To 100
Cells(1, 1) = x
If x = 5 Then
Exit Sub
End If
Next x
Range("b1") = 100
End Sub
'2、Exit function
Function ff()
Dim x As Integer
For x = 1 To 100
If x = 5 Then
Exit Function
End If
Next x
ff = 100
End Function
'3、Exit for
Sub e2()
Dim x As Integer
For x = 1 To 100
Cells(1, 1) = x
If x = 5 Then
Exit For
End If
Next x
Range("b1") = 100
End Sub
'4、Exit do
Sub e3()
Dim x As Integer
Do
x = x + 1
Cells(1, 1) = x
If x = 5 Then
Exit Do
End If
Loop Until x = 100
Range("b1") = 100
End Sub
'分支语句
'1. Goto语句,跳转到指定的地方
Sub t1()
Dim x As Integer
Dim sr
100:
sr = Application.InputBox("请输入数字", "输入提示")
If Len(sr) = 0 Or Len(sr) = 5 Then GoTo 100
End Sub
'2. gosub..return ,跳过去,再跳回来
Sub t2()
Dim x As Integer
For x = 1 To 10
If Cells(x, 1) Mod 2 = 0 Then GoSub 100
Next x
Exit Sub
100:
Cells(x, 1) = "偶数"
Return '跳到gosub 100 这一句
End Sub
'3. on error resume next '遇到错误,跳过继续执行下一句
Sub t3()
On Error Resume Next
Dim x As Integer
For x = 1 To 10
Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
Next x
End Sub
'4. on error goto '出错时跳到指定的行数
Sub t4()
On Error GoTo 100
Dim x As Integer
For x = 1 To 10
Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
Next x
Exit Sub
100:
MsgBox "在第" & x & "行出错了"
End Sub
'5. on error goto 0 '取消错误跳转
Sub t5()
On Error Resume Next
Dim x As Integer
For x = 1 To 10
If x > 5 Then On Error GoTo 0
Cells(x, 3) = Cells(x, 2) * Cells(x, 1)
Next x
Exit Sub
End Sub
vba LineEst 函数
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:内存在bios显示1333
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
VBA Function函数 重新计算 vba用函数
1,vba字符串函数列表: Trim(string) 去掉string左右两端空白 Ltrim(string) 去掉string左端空白 Rtrim(string)
VBA Function函数 重新计算 数据 字符串 VBA -
VBA InStr 函数
InStr 函数 函数 (Visual Basic for Applications) 返回一个 **Va
字符串 搜索 字符串比较 区域设置 数据库