Excel_2016_VBA学习笔记_基础语法篇①

  1. 在Excel中快速打开VBA编辑器

    1
    2
    3
    FN+Alt+F11
    or
    选择开发选项,点击 Visual Basic
  1. 在VBA编辑器中摁以下按钮,切回Excel表格中

    1
    FN+Alt+F11
  2. 创建一个VBA输入代码界面

    1
    插入→模块→插入→过程→子程序 or 函数
  3. 注释

    1
    2
    英文下的单引号  '
    视图→工具栏→编辑
  4. 相关函数的帮助

    1
    鼠标选中函数名+FN+F11,会弹出网页版该函数的解释
  5. 代码换行
    下划线+空格+换行

1
2
3
4
Sub shiyan()
MsgBox _
"我叫shiyan"
End Sub
  1. 对象选择确认

    在操作sheet时,需要通过“视图”中的“工程资源管理器”中显示sheet序号来定。
    因为不这样的确认的话,程序是找不见对象的,比如你认为是sheet2,其实人家对象是sheet3.

  2. 复制sheet1表中的数据到sheet2中(附赠一个填充语句)

    1
    2
    3
    4
    Sub 填充和复制()
    'Sheet1.Range("a12:a15", "b12:b15") = 1
    Sheet1.Range("a1:a9").Copy Sheet3.Range("a1")
    End Sub
  3. 删除sheet的方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    ' 删除sheet3这个表
    Sub 删除表()
    Sheet3.Delete
    End Sub
    or
    ' 删除排列顺序第三个的表
    Sub 删除表()
    Sheets(3).Delete
    End Sub
  4. 定义常量(常量是定义了之后就不做变化了)
    常量定义格式:const 常量名 = 常量表达式

1
2
3
Sub 常量()
Const aaa = 3.14
End Sub
  1. 定义变量(在定义之后还能再次赋值)
    变量定义格式:dim 变量 as 变量类型
1
2
3
4
5
6
7
Sub 变量()
Dim aaa As Integer
aaa = 123
Debug.Print aaa
aaa = 321
Debug.Print aaa
End Sub
  1. 注意事项1

    VBA允许使用未定义的变量,默认是变体变量(variant)
    因为默认的类型,开辟的空间较大,不建议使用
    变量的强制声明:option explicit (在代码首行定义后,如果下面的子代码不定义变量的话,就会提示编译出错)

  2. 变量的命名规则

    已字母开头
    不能使用保留字
    不超过255个字符
    同一范围内必须是唯一的

  3. 常见的数据类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    类型		注释		简写		占用内存
    integer 整型 % 2byte
    single 单精度 ! 4byte
    double 双精度 # 8byte
    long 长整型 & 4byte
    string 字符型 $ 定长或变长
    currency 货币型 @ 8byte
    Sub 定义类型()
    Dim a As Integer, b As Single, c As String
    Dim d%, e!, f$
    End Sub
  4. IF判断语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub if判断1()
Dim a%, b%
a = 2
b = 2
If a = b Then MsgBox "相等"
End Sub

Sub if判断2()
Dim a%, b%
a = 2
b = 2
If a = b Then
MsgBox "相等"
End If
End Sub

Sub if判断3()
Dim a%, b%
a = 2
b = 3
If a = b Then
MsgBox "相等"
Else
MsgBox "不相等"
End If
End Sub
  1. IF判断多语句

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub if判断多条件()
    If Sheet1.Range("c3") >= 90 Then
    Sheet1.Range("c4") = "优秀"
    ElseIf Sheet1.Range("c3") >= 80 Then
    Sheet1.Range("c4") = "良好"
    ElseIf Sheet1.Range("c3") >= 70 Then
    Sheet1.Range("c4") = "中等"
    Else
    Sheet1.Range("c4") = "较差"
    End If
    End Sub
  2. IIF函数应用

    1
    2
    3
    Sub iif函数应用()
    Sheet1.Cells(行, 列) = IIf(Sheet1.Cells(行, 列) > 80, "优秀", "不优秀")
    End Sub
  3. IF用法小结

    单行形式(if…then)
    if 条件判断 then 条件成立结果
    注意:在单行形式中,按照if…then判断的结果也可以执行多条语句
    所有语句必须在同一行上并且以冒号分开

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub test()
If 10 > 5 Then a = a + 1: b = b + 2: c = c + 3
End Sub

Sub test()
If 10 > 5 Then MsgBox "yes" Else MsgBox "no"
End Sub

Sub test()
If 3 > 2 Then
a = 1 + 1
b = 2 + 2
c = 3 + 3
End If
End Sub
  1. Select cass 语法
    根据表达式的值来决定执行语句中的其中一个。
    单条件判断:
1
2
3
4
5
6
7
8
9
10
Sub select_case语法()
Dim i As Integer
i = 1
Select Case i
Case Is > 0
MsgBox "正数"
Case Else
MsgBox "负数"
End Select
End Sub

多条件判断:

1
2
3
4
5
6
7
8
9
10
11
12
Sub select_case_多条件判断()
Select Case Sheet1.[c3].Value
Case Is > 90
Sheet1.[c4] = Sheet1.[G3]
Case Is > 80
Sheet1.[c4] = Sheet1.[G4]
Case Is > 60
Sheet1.[c4] = Sheet1.[G5]
Case Is < 60
Sheet1.[c4] = Sheet1.[G6]
End Select
End Sub
  1. DO…LOOP语法

    do…loop循环语句

    某条件之后输入 Exit Do 结束循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub do_loop循环()
    Dim a%
    Do
    a = a + 1
    If a > 10 Then
    MsgBox a & "终于大于10"
    Exit Do
    End If
    Loop
    End Sub
  2. DO…WHILE…LOOP语法

    do…while…loop循环语句

    条件小于某值后结束循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub do_while_loop循环()
    Dim a%
    a = 1
    Do While a < 12
    If a > 10 Then
    MsgBox a & "终于大于10"
    End If
    a = a + 1
    Loop
    End Sub
  3. DO…UNTIL…LOOP语法

    do…until…loop循环语句

    条件等于某值后结束循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub do_until_loop循环()
    Dim a%
    a = 1
    Do Until a = 12
    If a > 10 Then
    MsgBox a & "终于大于10"
    End If
    a = a + 1
    Loop
    End Sub
  4. WHILE和UNTIL循环小技巧
    while和until不但可以放在do后面,也可以放在loop后面
    事实上有时在循环的最后一行进行判断,更有意义

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub do_loop最后判断循环()
Dim pass$, i!
Do
pass = InputBox("请输入密码")
Loop Until pass = "123"
End Sub

Sub do_loop最后判断循环()
Dim pass$, i!
Do
i = i + 1
If i > 3 Then Exit Do
pass = InputBox("请输入密码")
Loop Until pass = "123"
End Sub
  1. FOR…EACH..NEXT循环
    当需要处理集合成员时,一般会用for…each…next来处理对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub foreach_next()
Dim rng As Range, n!
For Each rng In Sheet1.Range("a1:a9")
If rng = "A1" Then rng.Interior.ColorIndex = 6
Next
End Sub

Sub foreach_next()
Dim wsh As Worksheet, n As Byte, m As String
For Each wsh In Worksheets
n = n + 1
m = wsh.Name
Sheet1.Cells(n, 3) = m
Next
End Sub
  1. FOR…NEXT 语法
    对数字进行累积相加
1
2
3
4
5
6
7
Sub for_next()
Dim i!, j!
For i = 1 To 10
j = j + i
Next
MsgBox j
End Sub
  1. for语法总结
    for …next 语句:已制定次数来重复执行一组语句
    for 计数变量 = 初始值 to 终止值 [step 步长值]
    [执行的一条或多条语句]
    [exit for]
    [执行的一条或者多条语句]
    net [计数变量]可以忽略不写
    循环中可以在任何位置放置任意个exit for 语句,随时退出循环
    exit for 与if…then经常一起使用,目的是找到符合条件后,跳出循环

  2. 九九乘法表

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub 九九乘法()
    Dim a!, b!
    For a = 1 To 9
    For b = 1 To 9
    If b > a Then
    Sheet1.Cells(a, b) = ""
    Else
    Sheet1.Cells(a, b) = a & "x" & b & "=" & a * b
    End If
    Next
    Next
    End Sub
  3. EXIT和END的介绍
    exit是退出当前语句

    exit do、exit for 、exit function 、 exit sub

end 结束一个过程或者块

end 、end function、 end if 、 end select 、 end sub

  1. GoTo line 跳转语句
    goto line 无条件的转移到过程中指定的行。
    注意,太多的 goto 语句,会使程序代码不容易阅读及调试。
    请尽可能使用结构化控制语句(do..loop等等)
1
2
3
4
5
6
Sub gotoline()
Dim str$
line:
str = InputBox("请写入名字")
If str <> "admin" Then GoTo line
End Sub

line 这个标识符可以是任意一个字符或者数字

1
2
3
4
5
6
Sub gotoline()
Dim str$
shiyan:
str = InputBox("请写入名字")
If str <> "admin" Then GoTo shiyan
End Sub
  1. GOSUB…RETUNRN跳转语句
    懒得解释了,看代码吧。。。。
1
2
3
4
5
6
7
8
9
10
Sub gosub_return()
Dim i!
For i = 1 To 9
If Sheet1.Range("a" & i) > 5 Then GoSub shiyan Else Sheet1.Range("b" & i) = "左边值小于5"
Next i
Exit Sub
shiyan:
Sheet1.Range("b" & i) = "左边值大于5"
Return
End Sub
  1. 错误分支语句
    On Error Resume Next
    但错误的时候,继续执行下去
1
2
3
4
5
6
7
Sub on_error_resume_next()
Dim i!
On Error Resume Next
For i = 2 To 5
Cells(i, 4) = Cells(i, 2) + Cells(i, 3)
Next i
End Sub

On Error GoTo 跳转值
当执行出错时,跳转到制定行

1
2
3
4
5
6
7
8
9
Sub on_error_goto_str()
Dim i!
On Error GoTo shiyan
For i = 2 To 5
Cells(i, 4) = Cells(i, 2) + Cells(i, 3)
Next
shiyan:
MsgBox "出错了!"
End Sub
  1. with 语句
    当对某个对象执行一系列的语句时,不用重复指出对象的名称
    with 固定值 … end with
1
2
3
4
5
6
7
Sub with赋值()
With Range("a1")
a = .Address
b = .Parent.Name
.Value = "1234"
End With
End Sub

多看注释就懂了
Sub 双with赋值()

1
2
3
4
5
6
7
8
9
With Range("a1")
.Value = "1234"
.Parent.Name = "hello word"
With .Font ' range("a1").font
.Size = 20
.Bold = True
End With
End With
End Sub
  1. 一些函数语法注意项
    当在vba代码中使用Excel函数时,当遇到函数内需要双引号时,需要填写两个双引号,即可。
1
2
3
Sub 使用函数()
Sheet1.Range("a1") = "=countif(A2:a4,"">4"")"
End Sub

一般使用Application.WorksheetFunction来借用工作表函数

1
2
3
4
5
Sub 运用工作表函数()
MsgBox Application.WorksheetFunction.CountIf(Range("a1:a5"), "王五")
MsgBox WorksheetFunction.CountIf(Range("a1:a5"), "王五")
MsgBox Application.CountIf(Range("a1:a5"), "王五")
End Sub

直接使用vba内置的函数来操作

1
2
3
4
Sub vba函数()
MsgBox VBA.Format(Range("d2"), "yyyy年m月d日")
MsgBox Format(Range("d2"), "yyyy年m月d日")
End Sub

自定义函数,具体用法等等以后的笔记。

1
2
3
Function 自定义函数(rng As Range)
自定义函数 = IIf(rng = "2", "等于2", "不等于2")
End Function
  1. 运算符
    定义:运算符是代表vba某种运算功能的符号
    赋值运算符:=
    数学运算符:&(字符连接符)、+(加)、-(减)、mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)
    逻辑运算符:not(非)、and(与)、or(或)、xor(异或)、eqv(相等)、imp(隐含)
    关系运算符:=(相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、like(匹配)、
1
2
3
4
Sub like_1()
a = "d" Like "d"
MsgBox (a)
End Sub

Excel_2016_VBA学习笔记_基础语法篇①
https://sh1yan.top/2019/05/04/excel-vba-1/
作者
shiyan
发布于
2019年5月4日
许可协议