乐于分享
好东西不私藏

excel 表格“宏 VBA ”基础课

excel 表格“宏 VBA ”基础课

第四部分:好的,第四部分:宏(VBA)基础课。从零到能写自动化脚本。

---

一、宏是什么

本质: 把重复操作录下来,一键重放。背后是VBA代码,可以进一步编辑、加循环、加判断。

---

二、开启宏功能

1. 文件 → 选项 → 自定义功能区 → 勾选“开发工具”。
2. 保存文件时选择 “.xlsm” 启用宏的工作簿,否则宏会丢失。

---

三、录制宏:写代码最懒的办法

步骤:

1. 开发工具 → “录制宏” → 起个名,设快捷键,确定。
2. 做你的操作(比如给表格套格式、排序、筛选)。
3. 点“停止录制”。

查看代码: 开发工具 → Visual Basic(或Alt+F11)→ 模块1,就能看到刚才生成的VBA代码。
运行: 开发工具 → 宏 → 选择宏名 → 执行。

---

四、VBA编辑器环境

· 工程资源管理器(左): 显示工作表、模块、ThisWorkbook。
· 代码窗口: 写代码的地方。
· 立即窗口(Ctrl+G): 测试单行代码,比如 ?Range("A1").Value 直接输出A1值。
· 常用操作: 双击工作表或模块,插入→模块新建代码区。

---

五、第一个自定义宏:弹窗打招呼

```vba
Sub SayHello()
    MsgBox "你好,我是宏!"
End Sub
```

在模块里粘贴,按F5运行。MsgBox 是弹出消息框。

---

六、核心对象(分层理解)

Excel万物皆对象: Application → Workbooks → Worksheets → Range/Cells。

1. 操控单元格

```vba
Range("A1").Value = 100           '给A1赋值
Range("A1:A10").Value = 5         '批量赋值
Cells(1, 2).Value = "数据"        '第1行第2列即B1
Range("A1").Select                '选中A1
```

2. 引用工作表

```vba
Sheets("Sheet1").Range("A1") = 1
Worksheets(1).Cells(1,1) = 1      '第1个工作表
```

3. 获取最后一行动态范围

```vba
lastRow = Cells(Rows.Count, 1).End(xlUp).Row   'A列最后非空行
Range("A1:A" & lastRow).Select
```

---

七、变量与数据类型

```vba
Dim 名字 As String
Dim 年龄 As Integer
Dim 工资 As Double
Dim 有效 As Boolean
Dim 日期 As Date

名字 = "张三"
年龄 = 30
```

必须用Dim声明? 不是强制,但养成好习惯避免混乱。

---

八、条件判断(If & Select Case)

```vba
If Range("B2").Value >= 60 Then
    Range("C2").Value = "及格"
Else
    Range("C2").Value = "不及格"
End If

'多条件
Select Case Range("B2").Value
    Case Is >= 90: Range("C2") = "优秀"
    Case Is >= 60: Range("C2") = "及格"
    Case Else: Range("C2") = "差"
End Select
```

---

九、循环(For & Do)

```vba
'给A1到A10填序号
For i = 1 To 10
    Cells(i, 1).Value = i
Next i

'遍历非空行
Dim r As Long
r = 2
Do While Cells(r, 1).Value <> ""
    Cells(r, 3) = Cells(r, 2) * 2   'C列 = B列×2
    r = r + 1
Loop
```

中途退出: Exit For,Exit Do

---

十、与用户交互(InputBox + MsgBox)

```vba
Dim 姓名 As String
姓名 = InputBox("请输入姓名:")
MsgBox "欢迎," & 姓名 & "!", vbInformation, "问候"
```

MsgBox返回值: 可以判断按了“是/否/取消”,用于分支。

---

十一、事件过程(自动触发)

VBA可以在特定事件发生时自动运行。

· 工作表事件: 双击VBA编辑器里的Sheet对象,左侧下拉选Worksheet,右侧选事件(如Change,SelectionChange)。
    例如:A1内容改变就自动执行:
  ```vba
  Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("A1")) Is Nothing Then
          MsgBox "A1变了!"
      End If
  End Sub
  ```
· 工作簿事件: 放在ThisWorkbook里,如Open(打开文件时自动运行)。
  ```vba
  Private Sub Workbook_Open()
      MsgBox "欢迎使用此报表", vbInformation
  End Sub
  ```

---

十二、宏与函数的区别

特性 函数(Function) 宏(Sub)
目的 计算并返回值 执行操作
使用位置 可直接在工作表公式里调用 只能通过按钮/快捷键/事件运行
能否修改单元格 不能直接修改其他单元格 能,所有操作都能做

但VBA也可以写自定义工作表函数(UDF),放到模块中返回结果即可在格子使用。

---

十三、实用小例子

一键清除筛选:

```vba
Sub 清除筛选()
    If ActiveSheet.AutoFilterMode Then
        ActiveSheet.AutoFilterMode = False
    End If
End Sub
```

复制粘贴为值(去公式):

```vba
Sub 粘贴为值()
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub
```

给指定区域加超链接的快速标记: 略。

---

十四、保存与安全

· 文件格式必须 .xlsm 或 .xlsb。
· 首次打开含有宏的文件,Excel会禁用,需点击“启用内容”。
· 可设为受信任位置:文件→选项→信任中心→信任中心设置→受信任位置,添加常用文件夹。

---

十五、进阶方向

· 学会录制宏 → 看生成的代码 → 学属性方法。
· 了解数组、字典对象 (Scripting.Dictionary) 提升速度。
· 学习用户窗体 (UserForm) 制作专业界面。
· 错误处理:On Error Resume Next / On Error GoTo 标签。

---

宏基础到此结束。
现在,你能不能试着录一个简单的宏,并打开VBA编辑器看看它长什么样?有任何步骤卡住,随时问我下一个想细化的点。基础课。从零到能写自动化脚本。

---

一、宏是什么

本质: 把重复操作录下来,一键重放。背后是VBA代码,可以进一步编辑、加循环、加判断。

---

二、开启宏功能

1. 文件 → 选项 → 自定义功能区 → 勾选“开发工具”。

2. 保存文件时选择 “.xlsm” 启用宏的工作簿,否则宏会丢失。

---

三、录制宏:写代码最懒的办法

步骤:

1. 开发工具 → “录制宏” → 起个名,设快捷键,确定。

2. 做你的操作(比如给表格套格式、排序、筛选)。

3. 点“停止录制”。

查看代码: 开发工具 → Visual Basic(或Alt+F11)→ 模块1,就能看到刚才生成的VBA代码。

运行: 开发工具 → 宏 → 选择宏名 → 执行。

---

四、VBA编辑器环境

· 工程资源管理器(左): 显示工作表、模块、ThisWorkbook。

· 代码窗口: 写代码的地方。

· 立即窗口(Ctrl+G): 测试单行代码,比如 ?Range("A1").Value 直接输出A1值。

· 常用操作: 双击工作表或模块,插入→模块新建代码区。

---

五、第一个自定义宏:弹窗打招呼

```vba

Sub SayHello()

    MsgBox "你好,我是宏!"

End Sub

```

在模块里粘贴,按F5运行。MsgBox 是弹出消息框。

---

六、核心对象(分层理解)

Excel万物皆对象: Application → Workbooks → Worksheets → Range/Cells。

1. 操控单元格

```vba

Range("A1").Value = 100           '给A1赋值

Range("A1:A10").Value = 5         '批量赋值

Cells(1, 2).Value = "数据"        '第1行第2列即B1

Range("A1").Select                '选中A1

```

2. 引用工作表

```vba

Sheets("Sheet1").Range("A1") = 1

Worksheets(1).Cells(1,1) = 1      '第1个工作表

```

3. 获取最后一行动态范围

```vba

lastRow = Cells(Rows.Count, 1).End(xlUp).Row   'A列最后非空行

Range("A1:A" & lastRow).Select

```

---

七、变量与数据类型

```vba

Dim 名字 As String

Dim 年龄 As Integer

Dim 工资 As Double

Dim 有效 As Boolean

Dim 日期 As Date

名字 = "张三"

年龄 = 30

```

必须用Dim声明? 不是强制,但养成好习惯避免混乱。

---

八、条件判断(If & Select Case)

```vba

If Range("B2").Value >= 60 Then

    Range("C2").Value = "及格"

Else

    Range("C2").Value = "不及格"

End If

'多条件

Select Case Range("B2").Value

    Case Is >= 90: Range("C2") = "优秀"

    Case Is >= 60: Range("C2") = "及格"

    Case Else: Range("C2") = "差"

End Select

```

---

九、循环(For & Do)

```vba

'给A1到A10填序号

For i = 1 To 10

    Cells(i, 1).Value = i

Next i

'遍历非空行

Dim r As Long

r = 2

Do While Cells(r, 1).Value <> ""

    Cells(r, 3) = Cells(r, 2) * 2   'C列 = B列×2

    r = r + 1

Loop

```

中途退出: Exit For,Exit Do

---

十、与用户交互(InputBox + MsgBox)

```vba

Dim 姓名 As String

姓名 = InputBox("请输入姓名:")

MsgBox "欢迎," & 姓名 & "!", vbInformation, "问候"

```

MsgBox返回值: 可以判断按了“是/否/取消”,用于分支。

---

十一、事件过程(自动触发)

VBA可以在特定事件发生时自动运行。

· 工作表事件: 双击VBA编辑器里的Sheet对象,左侧下拉选Worksheet,右侧选事件(如Change,SelectionChange)。

    例如:A1内容改变就自动执行:

  ```vba

  Private Sub Worksheet_Change(ByVal Target As Range)

      If Not Intersect(Target, Range("A1")) Is Nothing Then

          MsgBox "A1变了!"

      End If

  End Sub

  ```

· 工作簿事件: 放在ThisWorkbook里,如Open(打开文件时自动运行)。

  ```vba

  Private Sub Workbook_Open()

      MsgBox "欢迎使用此报表", vbInformation

  End Sub

  ```

---

十二、宏与函数的区别

特性 函数(Function) 宏(Sub)

目的 计算并返回值 执行操作

使用位置 可直接在工作表公式里调用 只能通过按钮/快捷键/事件运行

能否修改单元格 不能直接修改其他单元格 能,所有操作都能做

但VBA也可以写自定义工作表函数(UDF),放到模块中返回结果即可在格子使用。

---

十三、实用小例子

一键清除筛选:

```vba

Sub 清除筛选()

    If ActiveSheet.AutoFilterMode Then

        ActiveSheet.AutoFilterMode = False

    End If

End Sub

```

复制粘贴为值(去公式):

```vba

Sub 粘贴为值()

    Selection.Copy

    Selection.PasteSpecial Paste:=xlPasteValues

    Application.CutCopyMode = False

End Sub

```

给指定区域加超链接的快速标记: 略。

---

十四、保存与安全

· 文件格式必须 .xlsm 或 .xlsb。

· 首次打开含有宏的文件,Excel会禁用,需点击“启用内容”。

· 可设为受信任位置:文件→选项→信任中心→信任中心设置→受信任位置,添加常用文件夹。

---

十五、进阶方向

· 学会录制宏 → 看生成的代码 → 学属性方法。

· 了解数组、字典对象 (Scripting.Dictionary) 提升速度。

· 学习用户窗体 (UserForm) 制作专业界面。

· 错误处理:On Error Resume Next / On Error GoTo 标签。

---

宏基础到此结束。

现在,你能不能试着录一个简单的宏,并打开VBA编辑器看看它长什么样?有任何步骤卡住,随时问我下一个想细化的点。