ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 23973|回复: 45

创建自己的函数,发表在中国电脑教育报上

[复制链接]

TA的精华主题

TA的得分主题

发表于 2002-10-5 07:28 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
创建自己的Excel函数

郑如定

  Excel的强大函数功能,为我们带来了极大方便,虽然它有200多个函数,但有时我们为实现一项规定的功能,可能用到几个函数或者采用嵌套函数,这样应用起来,也不太方便。其实对于我们经常用到的功能,我们可以创建自定义函数UDF(User—defined function),它的运行与Excel中自带的函数完全相同。建立自定义函数有以下几个优点:建立自己特殊的功能和名称的函数;能将复杂的、嵌套的、多个原有的函数组合在一起,发挥更大的威力。

  比如现在我们要根据收入来计算个人收入调节税,按照规定每月收入减去800元基础后,除去养老保险金、失业保险金、医疗保险金、住房公积金、工会费,对剩下的余额征收个税。余额在500元内的征收余额的5%,余额为500~2000元的征收余额的10%,余额为2000~5000元的征收余额的15%……征收个税的最高税率为45%(余额在10万元以上的)。如果用Excel的函数,则要进行多层if嵌套,稍有不注意,可能造成计算上差错,我们建立自己的函数来解决这个问题。

  首先进入Excel,在[工具]→[宏]→[Visul Basic编辑器](也可按组合键[Alt+F11]),在“Visul Basic编辑器”中选择[插入]→[添加模块],在代码窗口输入下列函数:


  图1 添加自制函数说明

  Function tax(income As Single) As Single

  Select Case income

  Case 0 To 800

  tax = 0

  Case 800.01 To 1300

  tax = (income - 800) * 0.05

  Case 1300.01 To 2800

  tax = (income - 1300) * 0.1 + 25

  Case 2800.01 To 5800

  tax = (income - 2800) * 0.15 + 175

  Case 5800.01 To 20800

  tax = (income - 5800) * 0.2 + 625

  Case 20800.01 To 40800

  tax = (income - 20800) * 0.25 + 3625

  Case 40800.01 To 60800

  tax = (income - 40800) * 0.3 + 8625

  Case 60800.01 To 80800

  tax = (income - 60800) * 0.35 + 14625

  Case 80800.01 To 100800

  tax = (income - 80800) * 0.4 + 21625

  Case Is >= 100800

  tax = (income - 100800) * 0.45 + 29625

  Case Is < 0

  MsgBox "你的工资 " && income && " 输入有误"

  End Select

  End Function

  我们知道,Excel中函数都有一个说明,帮助使用,我们也要给这个函数添加一个说明。在工具栏中选择“对象浏览器”(如图1),选择我们所做Tax模块,在其[右键]→[属性]中添加关于对这个函数的描述,这个描述将出现在Excel中关于函数的说明中,如果你要对软件保密的话,在“模块”上按右键,[VBAproject属性]→[保护中设置密码],嘿嘿!别人就看不到你的源程序了。


  图2 使用自制函数

  这时,退出,回到Excel界面,将这个文件另存为:类型为“Microsoft Excel 加载宏”,在Excel 2000中,它会自动更改保存位置为c:\windows\application data\microsoft\addins(系统装在c:\windows),当然,你也可以把这个文件tax.xla,直接复制到office\library(office的安装路径下),而在Excel 97中只能放在后一个位置。使用函数很简单,点击[工具]→[加载宏],在你创建的Tax前打个勾,在单元格直接输入“=tax()”,是不是像Microsoft office提供的函数一样(如图2),很有点专业味道。


  图3 我的函数好像不够专业

  假如你把调用这个宏的Excel文件拷贝到别的机子上运行,会出现“当前所要打开的文档含有其他文档的链接,是否要使用其他工作簿中的改动更新当前工作簿”的提示,可以显示原先计算的数据,这是因为在Excel中的[工具]→[选项]→[重新计算]中,一般选中“保存外部链接数据”,但你不能重新计算,因为不能链接这个宏,别人机子上根本就没有这个函数。


  图4 添加中文描述

  只不过在“加载宏”时,我自己创建的函数,是一个英文标题,而且下面也没有说明(如图3),你是不是觉得有点不够专业。跟我来,再教你一招,如果你使用的是Excel 2000时,找到tax.xla,点击[右键]→[属性]→[摘要] (如图4),在描述里添加所需内容来对函数进行相关描述,其中“标题”部分将出现在“加载宏”的方框中,“备注”部分将出现在下面的函数说明部分。这时再看看,够不够专业。在Excel 97中也可以在其右键属性中作相应更改。

[此贴子已经被czzqb于2007-6-1 5:49:44编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2002-10-5 07:29 | 显示全部楼层
请大家指教!

TA的精华主题

TA的得分主题

发表于 2002-10-5 20:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
挺好的

TA的精华主题

TA的得分主题

 楼主| 发表于 2002-10-5 21:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢谢

TA的精华主题

TA的得分主题

发表于 2002-10-7 10:45 | 显示全部楼层
非常不错,请发原文给我,我发到Excel Home上去!

TA的精华主题

TA的得分主题

发表于 2002-10-7 20:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好主意!好方法!好手段!可惜俺现在水平太差,不能如愿,希望、希望、好希望能早日达到这个境界。

TA的精华主题

TA的得分主题

发表于 2002-10-8 12:02 | 显示全部楼层
文章挺不错的,但我按步就班却未能实现,很简单的一个函数 Function MyDate() as Date MyDate=Date end Function 已经放在了加载宏,也引用了,但在单元格里输入时无法得出答案,出现“#NAME?”这样的错误。

TA的精华主题

TA的得分主题

 楼主| 发表于 2002-10-8 22:14 | 显示全部楼层
这不难的,只不过化了我很长时间才研究出来,这篇文章现在很多地方转载,如新浪、齐鲁热线,太平洋,如有问题,请大家多多指教

TA的精华主题

TA的得分主题

 楼主| 发表于 2002-10-9 06:31 | 显示全部楼层
文章挺不错的,但我按步就班却未能实现,很简单的一个函数 Function MyDate() as Date MyDate=Date end Function 已经放在了加载宏,也引用了,但在单元格里输入时无法得出答案,出现“#NAME?”这样的错误。 你要设置单元格格式,设成日期型,当然在函数在是可以设置的,我试了一下,就是这个原因
[此贴子已经被作者于2002-10-9 6:31:05编辑过]

TA的精华主题

TA的得分主题

发表于 2003-3-29 01:01 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-25 00:37 , Processed in 0.047534 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表