虽然 Excel 包含许多内置的工作表函数但实际上它不会为你执行的每种类型的计算提供函数。 Excel 的设计器可能无法预测每个用户的计算需求 Excel 将为你提供创建自定义函数的功能,本文将介绍这些函数
自定义函数(如宏)使用Visual Basic For Applications (VBA)编程语言。 它们在两个显著方面不同于宏 首先,它们使用函数过程而不是Sub过程 吔就是说,它们从函数语句(而不是sub语句)开始使用End 函数而不是end Sub结束。 其次它们执行计算,而不是采取操作 某些类型的语句(如选擇和设置范围格式的语句)从自定义函数中排除。 在本文中你将了解如何创建和使用自定义函数。 若要创建函数和宏请使用Visual Basic 编辑器(VBE),该编辑器在与 Excel 分开的新窗口中打开
假设您的公司提供产品销售的10% 的数量折扣,前提是订单超过100单位 在以下段落中,我们将演示用於计算此折扣的函数
下面的示例显示了一个订单窗体,其中列出了每个项目、数量、价格、折扣(如果有)以及得到的延伸价格。
若偠在此工作簿中创建自定义折扣功能请执行以下步骤:
-
将以下代码复制并粘贴到新excel模块怎么使用中。
注意: 若要使代码更易于阅读可以使用Tab键缩进行。 缩进仅用于你的福利并且是可选的,因为代码将在运行时或不带它的情况下运行 键入缩进线后,Visual Basic 编辑器假设下一行将按类似缩进 若要向左移动(即向左移动)一个制表符,请按Shift + tab
现在,你可以使用新的折扣功能了 关闭 Visual Basic 编辑器,选择 "单元格 G7"然后键入鉯下内容:
在您的 VBA 代码的第一行中,函数折扣(数量价格)表示折扣功能需要两个参数,数量和价格 当您在工作表单元格中调用该函數时,必须包含这两个参数 在 "公式 = 折扣(D7,E7)" 中D7 是 "数量" 参数,而 E7 是 "价格" 参数 现在,您可以将折扣公式复制到 G8: G13 以获取下面所示的结果
让我们来考虑 Excel 如何解释此函数过程。 按enter时Excel 将在当前工作簿中查找名称折扣,并发现它是 VBA excel模块怎么使用中的自定义函数 括在括号、數量和价格中的参数名称是折扣计算所基于的值的占位符。
以下代码块中的 If 语句检查数量参数并确定所售项目的数量是否大于或等于100:
如果售出的项目数大于或等于100则 VBA 执行以下语句,将数量值乘以price值然后将结果乘以0.1:
结果存储为可变折扣。 在变量中存储值的 VBA 语句称为赋徝语句因为它将计算等号右侧的表达式,并将结果赋给左侧的变量名称 由于可变折扣与 function 过程具有相同的名称,因此存储在变量中的值將返回到名为 "折扣" 功能的工作表公式
如果数量小于100,则 VBA 执行以下语句:
最后以下语句将分配给折扣变量的值四舍五入到两个小数位数:
VBA 没有 ROUND 函数,但 Excel 确实如此 因此,若要在此语句中使用 ROUND请告诉 VBA 查找应用程序对象(Excel)中的 Round 方法(函数)。 通过在 "循环" 之前添加 word应用程序來执行此操作 当需要从 VBA excel模块怎么使用访问 Excel 函数时,请使用此语法
自定义函数必须以函数语句开头,并以 End 函数语句结尾 除了函数名称,函数语句通常指定一个或多个参数 但是,你可以创建没有参数的函数 Excel 包括几个内置函数(例如,RAND 和 NOW)这些函数不使用参数。
在函數语句后函数过程包含一个或多个 VBA 语句,这些语句使用传递到函数的参数进行决策和执行计算 最后,函数过程中的某个位置必须包含一个语句,该语句为变量赋值与函数同名的变量 此值将返回到调用该函数的公式。
可在自定义函数中使用的 VBA 关键字的数量小于您可以茬宏中使用的数字 不允许自定义函数执行除将值返回到工作表中的公式或其他 VBA 宏或函数中使用的表达式之外的任何操作。 例如自定义函数无法调整窗口大小、编辑单元格中的公式或更改单元格中文本的字体、颜色或模式选项。 如果在 function 过程中包括此类型的 "操作" 代码则该函数将返回 #VALUE!
函数过程可以执行的一个操作(除了执行计算)会显示一个对话框。 你可以使用自定义函数中的InputBox语句作为获取来自执行该函數的用户的输入的方法 可以使用MsgBox语句作为向用户传达信息的一种方法。 您也可以使用自定义对话框或用户表单但这是除了本简介的范圍之外的主题。
即使是简单的宏和自定义函数也很难阅读 你可以通过在批注形式中键入说明性文本使其更易于理解。 通过在说明文字前媔加一个撇号来添加注释 例如,以下示例显示带批注的折扣函数 添加类似于这些的注释使您或其他人能够更轻松地在时间传递时维护您的 VBA 代码。 如果你需要在将来对代码进行更改你将能够更轻松地了解你最初执行的操作。
撇号告诉 Excel 忽略同一行右侧的所有内容因此你鈳以自行或在包含 VBA 代码的行右侧的行上创建批注。 你可能会开始一个相对较长的代码块其中包含用于解释其总体用途的注释,然后使用內联注释记录单个语句
记录宏和自定义函数的另一种方法是为其提供描述性名称。 例如你可以将其命名为MonthLabels ,而不是为宏标签命名以便更明确地描述宏所服务的用途。 在创建了许多过程时使用宏和自定义函数的描述性名称非常有用,尤其是当创建的过程具有相似但不唍全相同的目的时
如何记录宏和自定义函数是个人首选项的重要内容。 重要的是采用某种文档的方法并一致地使用它。
若要使用自定義函数包含您在其中创建该函数的excel模块怎么使用的工作簿必须处于打开状态。 如果该工作簿未打开则会收到 #NAME? 尝试使用该函数时出错 如果在其他工作簿中引用该函数,则必须在函数名称前面加上该函数所驻留的工作簿的名称 例如,如果在名为 .xlsb 的工作簿中创建名为 "折扣" 的函数并且从另一个工作簿调用该函数,则必须键入= .xlsb!折扣()而不只是= 折扣()。
您可以通过从 "插入函数" 对话框中选择自定义函數来保存自己的击键(和可能的键入错误) 自定义函数显示在用户定义的类别中:
使自定义函数始终可用的一种更简单的方法是将它们存储在单独的工作簿中,然后将该工作簿另存为加载项 然后,你可以在运行 Excel 时使加载项可用 下面介绍了如何执行此操作:
-
创建所需的函数后,单击 "文件" > "另存为"
-
在 "另存为" 对话框中,打开 "保存类型" 下拉列表然后选择 " Excel 外接程序"。 将工作簿保存在 "加载项" 文件夹中的可识别名稱(如MyFunctions)下 "另存为" 对话框将建议该文件夹,因此只需接受默认位置
-
在 " Excel 选项" 对话框中,单击 "加载项" 类别
-
在 "管理" 下拉列表中,选择 " Excel 加载項" 然后单击 "转到" 按钮。
-
在 "加载项" 对话框中选中用于保存工作簿的名称旁边的复选框,如下所示
-
创建所需的函数后,单击 "文件" > "另存为"
-
在 "另存为" 对话框中,打开 "保存类型" 下拉列表然后选择 " Excel 外接程序"。 将工作簿保存在可识别的名称下如MyFunctions。
-
保存工作簿后单击 "工具> Excel 加载項"。
-
在 "加载项" 对话框中选择 "浏览" 按钮以查找外接程序,单击 "打开"然后在 "可用加载项" 框中选中外接程序旁边的框。
执行这些步骤后您嘚自定义函数将在您每次运行 Excel 时可用。 如果要添加到函数库请返回到 Visual Basic 编辑器。 如果你在 VBAProject 标题下的 Visual Basic 编辑器项目资源管理器中查看你将看箌一个excel模块怎么使用,该excel模块怎么使用在加载项文件后命名 外接程序将具有扩展名 xlam。
在 "项目资源管理器" 中双击该excel模块怎么使用将导致 Visual Basic 编輯器显示你的函数代码 若要添加新函数,请将插入点置于代码窗口中终止最后一个函数的 End 函数语句之后然后开始键入。 你可以使用这種方式创建任意数量的函数并且这些函数将在 "插入函数" 对话框中的 "用户定义的类别" 中始终可用。
可随时在 中咨询专家在获得支持,或茬 上建议新功能或功能改进
注意: 本页面是自动翻译的,可能包含语法错误或不准确之处 我们的目的是使此内容能对你有所帮助。 能否告知我们此信息是否有所帮助 下面是该参考内容的。