文章目录

VBA 函数定义:Function 与 Sub

发布于 2026-04-15 09:25:26 · 浏览 27 次 · 评论 0 条

在 VBA 编程中,Sub(子过程)和 Function(函数过程)是构建代码的两大基石。理解二者的区别并正确使用,是让代码既好用又好维护的关键。简单来说,Sub 负责执行动作Function 负责计算并返回结果


一、 Sub 过程:只做不说的“执行者”

Sub 是一系列 VBA 语句的集合,它像一个具体的动作指令,告诉 Excel 去执行某项操作(比如复制数据、设置格式、打开弹窗),但它执行完后不会给你一个可以放进单元格里的返回值。

1. 语法结构

定义一个 Sub 需要使用 Sub 关键字开头,以 End Sub 结尾。

Sub 过程名称()
    ' 这里写具体要执行的代码
    ' 代码块...
End Sub

2. 实操:创建一个自动调整格式的 Sub

我们要写一个过程,将选中的单元格背景设为黄色,字体设为红色,并弹窗提示。

  1. 按下 Alt + F11 打开 VBA 编辑器。
  2. 在左侧工程窗口中,右键点击 你的工作簿名称。
  3. 选择 插入 -> 模块
  4. 在右侧空白代码窗口中,输入 以下代码:
Sub 标记重要数据()
    ' 设置选中区域的背景色为黄色
    Selection.Interior.Color = vbYellow

    ' 设置选中区域的字体颜色为红色
    Selection.Font.Color = vbRed

    ' 弹出一个提示框
    MsgBox "格式调整已完成!"
End Sub
  1. 回到 Excel 界面,选中 一片单元格区域。
  2. 按下 Alt + F8选择 标记重要数据,然后点击 执行

观察结果,单元格格式变了,并且弹出了提示框。这就是 Sub 的典型用法:执行动作,不求回报(返回值)。


二、 Function 过程:精于计算的“计算器”

Function(函数)的主要目的是接收数据,进行处理,然后把结果返回给调用者。这与 Excel 自带的 SUMVLOOKUP 函数完全一样。

1. 语法结构

定义 Function 时,必须指定函数的返回值类型(如 Integer, String, Double 等),并在函数体内将计算结果赋值给函数名本身。

Function 函数名称(参数1 As 类型, 参数2 As 类型) As 返回类型
    ' 处理逻辑...

    ' 【关键步骤】将最终结果赋值给函数名
    函数名称 = 计算结果
End Function

2. 实操:创建一个计算个人所得税的 Function

假设我们需要计算一个简单的税额逻辑(此处仅为演示):应纳税所得额超过 5000 的部分按 10% 纳税。

  1. 在刚才的模块中,End Sub 下方继续输入 以下代码:
Function 计算税额(收入 As Double) As Double
    const 免征额 As Double = 5000

    ' 如果收入小于免征额
    If 收入 <= 免征额 Then
        计算税额 = 0
    Else
        ' 计算公式:(收入 - 免征额) * 税率
        ' 使用数学公式:$T = (I - D) \times R$,其中 T=税额, I=收入, D=免征额, R=税率
        计算税额 = (收入 - 免征额) * 0.1
    End If
End Function
  1. 回到 Excel 工作表界面。
  2. 在任意单元格中输入 公式:=计算税额(8000)
  3. 按下 回车。

单元格会显示 300。这里,Function 就像一个内置公式一样,接收了 8000 这个参数,经过计算,返回了 300 这个值。


三、 Sub 与 Function 的核心区别

为了让你在开发时能迅速做出选择,请参考下表。

特性 Sub 过程 (Sub) Function 过程 (Function)
主要用途 执行操作、修改对象、控制流程 进行计算、返回特定值
返回值 ,无法直接在单元格公式中调用 ,可以在单元格公式或代码中调用
调用方式 只能通过 Call 关键字或直接写过程名调用 既可在单元格作为公式使用,也可在代码中调用
赋值方式 不需要给过程名赋值 必须将结果赋值给函数名(如 函数名 = 值

四、 进阶实战:让 Sub 调用 Function

在实际开发中,我们通常让 Sub 负责“输入和输出”(比如获取用户输入、显示结果),让 Function 负责“核心逻辑计算”。这种分工让代码更清晰。

场景:用户点击按钮 -> 输入工资 -> 计算税额 -> 弹窗显示结果。

操作步骤

  1. 在 VBA 编辑器中,输入 以下调用代码(之前的 计算税额 函数需保留):
Sub 获取工资并算税()
    Dim 用户工资 As Double
    Dim 最终税额 As Double

    ' 1. 使用 InputBox 获取用户输入
    用户工资 = InputBox("请输入您的税前工资:")

    ' 2. 调用我们之前写的 Function 进行计算
    ' 这里 Function 就像一台机器,投入工资,产出税额
    最终税额 = 计算税额(用户工资)

    ' 3. 使用 MsgBox 显示结果,使用 & 符号连接字符串
    MsgBox "您的工资为:" & 用户工资 & vbCrLf & "应缴税额为:" & 最终税额
End Sub
  1. 按下 F5 运行 获取工资并算税
  2. 在弹出的输入框中输入 12000点击 确定。
  3. 查看最终弹出的税额结果。

执行流程解析

下面的流程图展示了上述代码中数据是如何流动的。

graph LR A[用户执行: Sub 过程] --> B[InputBox: 输入工资] B -->|传递参数| C[Function: 计算税额] C -->|返回结果: 税额| D[Sub 接收结果] D --> E[MsgBox: 显示最终信息] style A fill:#e1f5fe,stroke:#01579b style C fill:#fff9c4,stroke:#fbc02d style E fill:#e8f5e9,stroke:#2e7d32

通过这种组合,你将程序的“界面交互”与“业务逻辑”完全分离开来。如果将来税率变了,你只需要修改 Function 内部的计算公式,而不需要去动 Sub 中的交互代码。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文