MICROSOFT

EP01. “User Defined Function 自定义函数”

首页 Microsoft 工具 Excel · VBA · Function and Sub · EP01
约 3 分钟· #EP01#Excel#Function and Sub
🔒 登录后可标记已读
  • Excel 内建函数不够用时,可以自己用 VBA 写一个「自定义函数(User Defined Function,简称 UDF)」
  • 写好之后就能像内建函数一样在工作表里直接用
  • 用「统计范围内偶数总和」当例子示范完整写法
  • 前置知识:基本的 For Each 循环和 Mod 运算符

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


建立自定义函数:SUMEVENNUMBERS

  1. 打开 VBA 编辑器,插入一个新模块
  2. 声明函数,参数是一个范围(Range):
Function SUMEVENNUMBERS(rng As Range)

Dim cell As Range

For Each cell In rng
    If cell.Value Mod 2 = 0 Then
        SUMEVENNUMBERS = SUMEVENNUMBERS + cell.Value
    End If
Next cell

End Function

逻辑说明

  • For Each cell In rng:逐一检查传进来的范围里每一个单元格
  • cell.Value Mod 2 = 0:用 Mod(取余数)运算符判断这个数字除以 2 余数是不是 0,是就代表这是偶数
  • 符合条件的值累加进函数本身的返回值

使用方式

在工作表里像用一般函数一样输入 =SUMEVENNUMBERS(A1:A10),就能算出这个范围里所有偶数的总和。

📌 自定义函数只在建立它的这份工作簿里可以使用。


学完你会

  • ✅ 用 Function 关键字写一个能在工作表里当公式用的自定义函数
  • ✅ 用 For Each 循环逐格检查传进来的 Range 参数
  • ✅ 知道自定义函数只在建立它的那份工作簿里可以用

常见错误

  • 忘记自定义函数是「绑定在这份工作簿」的,换一份文件就用不了
  • Mod 判断偶数写反条件(写成 <> 0 而不是 = 0),结果统计到的是奇数而不是偶数
  • 函数参数没有声明成 Range 类型,导致传进来的范围无法用 For Each 逐格检查

Sources

Blog / Website:

  1. User Defined Function