Excel自定义函数实例集锦文章.docx
《Excel自定义函数实例集锦文章.docx》由会员分享,可在线阅读,更多相关《Excel自定义函数实例集锦文章.docx(20页珍藏版)》请在冰豆网上搜索。
Excel自定义函数实例集锦文章
在Excel中自定义函数
Excel函数虽然丰富,但并不能满足我们的所有需要。
我们可以自定义一个函数,来完成一些特定的运算。
下面,我们就来自定义一个计算梯形面积的函数:
1.执行“工具→宏→VisualBasic编辑器”菜单命令(或按“Alt+F11”快捷键),打开VisualBasic编辑窗口。
2.在窗口中,执行“插入→模块”菜单命令,插入一个新的模块——模块1。
3.在右边的“代码窗口”中输入以下代码:
FunctionV(a,b,h)
V=h*(a+b)/2
EndFunction
4.关闭窗口,自定义函数完成。
以后可以像使用内置函数一样使用自定义函数。
提示:
用上面方法自定义的函数通常只能在相应的工作簿中使用。
经验分享Excel中自定义函数实例剖析
一、认识VBA
在介绍自定义函数的具体使用之前,不得不先介绍一下VBA,原因很简单,自定义函数就是用它创建的。
VBA的全称是VisualBasicforAppli
cation,它是微软最好的通用应用程序脚本编程语言,它的特点是容易上手,而且功能非常强大。
在微软所有的Office组件中,如Word、Access、Powerpoint等等都包含VBA,如果你能在一种Office组件中熟练使用VBA,那么在其它组件中使用VBA的原理是相通的。
Excel中VBA主要有两个用途,一是使电子表格的任务自动化;二是可以用它创建用于工作表公式的自定义函数。
由此可见,使用Excel自定义函数的一个前提条件是对VBA基础知识有所了解,如果读者朋友有使用VisualBasic编程语言的经验,那么使用VBA时会感觉有很多相似之处。
如果读者朋友完全是一个新手,也不必太担心,因为实际的操作和运用是很简单的。
二、什么时候使用自定义函数?
有些初学Excel的朋友可能有这样疑问:
Excel已经内置了这么多函数,我还有必要创建自己的函数吗?
回答是肯定的。
原因有两个,它们也正好可以解释什么时候使用Excel自定义函数的问题。
第一,自定义函数可以简化我们的工作。
有些工作,我们的确可以在公式中组合使用Excel内置的函数来完成任务,但是这样做的一个明显缺点是,我们的公式可能太冗长、繁琐,可读性很差,不易于管理,除了自己之外别人可能很难理解。
这时,我们可以通过使用自定义函数来简化自己的工作。
第二,自定义函数可以满足我们个性化的需要,可以使我们的公式具有更强大和灵活的功能。
实际工作的要求千变万化,仅使用Excel内置函数常常不能圆满地解决问题,这时,我们就可以使用自定义函数来满足实际工作中的个性化需求。
上面的讲述比较抽象,我们还是把重点放在实际例子的剖析上,请大家在实际例子中进一步体会,进而学会在Excel中创建和使用自定义函数。
下面我们通过两个典型实例,学习自定义函数使用的全过程。
这里实际上假设读者朋友都有一定的VBA基础。
假如你完全没有VBA基础也不要紧,当学习完实例后,若觉得自定义函数在自己以后的工作中可能用到,那么再去补充相应的VBA基础也不迟。
(一)计算个人调节税的自定义函数
任务
假设个人调节税的收缴标准是:
工资小于等于800元的免征调节税,工资800元以上至1500元的超过部分按5%的税率征收,1500元以上至2000元的超过部分按8%的税率征收,高于2000元的超过部分按20%的税率征收。
分析
假设Sheet1工作表的A、B、C、D列中分别存放“姓名”、“总工资”、“调节税”、“税后工资”字段数据,如图1所示。
图1
平时使用较多的方法是借助嵌套使用IF函数计算,比如在C2单元格输入公式“=IF(B2<=800,0,IF(B2<=1500,(B2-800)*0.05,IF(B2<=2000,700*0.05+(B2-1500)*0.08,700*0.05+500*0.08+(B2-2000)*0.2)))”,然后通过填充柄复制公式到C列的其余单元格。
既然公式能够解决问题,为什么还要使用自定义函数的方法呢?
正如前面提到的两个方面的原因:
一是公式看起来太繁琐,不便于理解和管理;二是公式的处理能力在面对稍微复杂一些的问题时便失去效用,比如假设调节税的税率标准会根据年龄的不同而改变,那么公式可能就无能为力了。
使用自定义函数
下面就通过此例介绍使用自定义函数的全过程,即使是初学Excel的朋友,也会感觉其操作实际上是非常简单的。
1.为了便于测试自定义函数的计算效果,可以先把上面采用公式计算
的结果删去。
然后选择菜单“工具→宏→VisualBasic编辑器”命令(或按下键盘Alt+F11组合键),打开VisualBasic窗口,我们将在这里自定义函数。
2.进入VisualBasic窗口后,选择菜单“插入→模块”命令,于是得到“模块1”,在其中输入如下自定义函数的代码(图2):
FunctionTAX(salary)
Constr1AsDouble=0.05
Constr2AsDouble=0.08
Constr3AsDouble=0.2
SelectCasesalary
CaseIs<=800
TAX=0
CaseIs<=1500
TAX=(salary-800)*r1
CaseIs<=2000
TAX=(1500-800)*r1+(salary-1500)*r2
CaseIs>2000
TAX=(1500-800)*r1+(2000-1500)*r2+(salary-2000)*r3
EndSelect
EndFunction
图2
3.函数自定义完成后,选择菜单“文件→关闭并返回到MicrosoftExcel”命令,返回到Excel工作表窗口,在C2单元格中输入公式“=TAX(B2)”回车后就计算出了第一个员工应付的个人调节税,然后用公式填充柄复制公式到其它后面的单元格,这样就利用自定义函数完成了个人调节税的计算(图3)。
图3
4.从自定义函数的代码中可以看出,用这种方式,自定义函数的功能非常易于理解,同时如果税率改变,相应地变化r1、r2、r3的值即可。
通常,自定义的函数只能在当前工作薄使用,如果该函数需要在其它工作薄中使用,则选择菜单“文件→另存为”命令,打开“另存为”对话框,选择保存类型为“MircosoftExcel加载宏”,然后输入一个文件名,如“TAX”单击“确定”后文件就被保存为加载宏(图4)。
然后选择菜单“工具→加载宏”命令,打开“加载宏”对话框,勾选“可用加载宏”列表框中的“Tax”复选框即可,单击“确定”按钮后(图5),就可以在本机上的所有工作薄中使用该自定义函数了。
图4
图5
如果想要在其它机器上使用该自定义函数,只要把上面的加载宏文件复制到其它电脑上加载宏的默认保存位置即可。
说明:
WindowsXP系统下加载宏文件的默认保存位置为:
C:
DocumentsandSettingszunyue(用户帐户)ApplicationDataMicrosoftAddIns文件夹。
任务
为了促进销售人员的工作积极性,销售部门经理制定了销售业绩奖金制度,奖金发放的标准奖金率如下:
月销售额小于等于2800元的奖金率为4%,月销售额为2800元至7900元的奖金率为7%,月销售额为7900元至15000元的奖金率为10%,月销售额为15000元至30000元的奖金率为13%,月销售额为30000元至50000元的奖金率为16%,月销售额大于50000元的奖金率为19%。
同时,为了鼓励员工持续地为公司工作,工龄越长对奖金越有利,具体规定为:
参与计算的奖金率等于标准奖金率加上工龄一半的百分数。
比如一个工龄为5年的员工,标准奖金率为7%时,参与计算的奖金率则为9.5%=7%+(5/2)%。
分析
首先,我们在Excel2003中制作好如图6的Sheet1工作表,开始分析计算的方法。
图6
如果不考虑工龄对奖金率的影响,那么可以利用嵌套使用IF函数,在D2单元格输入公式“=IF(B2<=2800,B2*4%,IF(B2<=7900,B2*7%,IF(B2<=15000,B2*10%,IF(B2<=30000,B2*13%,IF(B2<=50000,B2*16%,B2*19%)))))”可以进行计算。
但是,该公式的一些弊端很明显:
一是公式看起来太繁琐、不容易理解,而且IF函数最多只能嵌套7层,万一奖金率超过7个,那么这个方法就无能为力了。
另一方面,由于没有考虑工龄,所以该方法不能算是解决问题了,如果我们把工龄融入到上述公式中,这样公式就会显得更加冗长繁琐,以后的管理与调整都很不方便。
使用自定义函数
下面我们看看利用Excel自定义函数进行计算的全过程,有了实例一的基础,相信大家理解起来更容易了。
不过这里与实例一有一个明显的差别是,该自定义函数使用了2个参数,请大家注意体会。
1.在上述Excel工作表中,选择菜单“工具→宏→VisualBasic编辑器”命令,打开VisualBasic窗口,然后选择菜单“插入→模块”命令,插入一个名为“模块1”的模块。
2.接着在模块编辑窗口中输入自定义函数的代码如下(图7):
FunctionREWARD(sales,years)AsDouble
Constr1AsDouble=0.04
Constr2AsDouble=0.07
Constr3AsDouble=0.1
Constr4AsDouble=0.13
Constr5AsDouble=0.16
Constr6AsDouble=0.19
SelectCasesales
CaseIs<=2800
REWARD=sales*(r1+years/200)
CaseIs<=7900
REWARD=sales*(r2+years/200)
CaseIs<=15000
REWARD=sales*(r3+years/200)
CaseIs<=30000
REWARD=sales*(r4+years/200)
CaseIs<=50000
REWARD=sales*(r5+years/200)
CaseIs>50000
REWARD=sales*(r6+years/200)
EndSelect
EndFunction
图7
3.从代码可以看出,我们自定义了一个名为REWARD的函数,它包含两个参数:
销售额sales和工龄years。
常量r1至r6分别存放着各个等级的奖金率,这样处理的好处是当奖金率调整时,修改非常方便。
同时,函数的层次结构比前面的公式清晰,让人容易理解函数的功能。
此外,当奖金率超过7个时,用自定义函数的方法仍然可以轻松处理。
4.接下来用该自定义函数进行具体的计算。
选择菜单“文件→关闭并返回到MicrosoftExcel”命令,关闭VisualBasic窗口,返回Excel工作表。
选中D2单元格,在其中输入“=reward(B2,C2)”,回车后就算出了第一个员工的奖金,然后利用公式填充柄复制该公式到后面的单元格,即可完成对其它员工奖金的计算(图8)。
图8
如果该自定义函数需要在其它工作薄或其它机器上使用,仿照实例一的操作方法进行即可。
四、总结
我们通过两个典型的实例讲述了Excel中自定义函数使用的全过程,相信大家都已经会到,其操作过程还是相当简单的。
如果你觉得自己的工作可能需要自定义函数,想进一步学好提高使用
自定义函数的水平,笔者想给出如下几点建议。
第一点、尽力全面熟练地掌握Excel内置的函数。
能用内置函数妥善解决的问题,就不必使用自定义函数。
实际上,自定义函数的执行效率当然是比Excel内置函数的执行效率慢的。
第二点、认真掌握好VBA的基础知识。
这点很容易理解,如果连VBA的基本规则都不甚清楚,那么别说是写出精致的自定义函数,就是写出能解决问题的自定义函数也还大有疑问。
第三点、具体写自定义函数代码之前,应该认真分析自己要处理的实际问题,如果这个问题有实际的数学函数模型,那么最好列出这个函数的解析式。
以上只是笔者的一些浅薄认识,希望能为大家使用好Excel自定义函数带来帮助,也希望大家能够通过使用自定义函数提高自己的工作效率。
Excel 2000自定义函数
虽然Excel中已有大量的内置函数,但有时可能还会碰到一些计算无函数可用的情况。
假如某公司采用一个特殊的数学公式计算产品购买者的折扣,如果有一个函数来计算岂不更方便?
下面就说一下如何创建这样的自定义函数。
自定义函数,也叫用户定义函数,是Excel最富有创意和吸引力的功能之一,下面我们在VisualBasic模块中创建一个函数。
在下面的例子中,我们要给每个人的金额乘一个系数,如果是上班时的工作餐,就打六折;如果是加班时的工作餐,就打五折;如果是休息日来就餐,就打九折。
首先打开“工具”菜单,单击“宏”命令中的“VisualBasic编辑器”,进入VisualBasic编辑环境,在“工程-VBAobject”栏中的当前表上单击鼠标右键,选择“插入”-“模块”,在右边栏创建下面的函数rrr,代码如下:
Functionrrr(tatol,rr)Ifrr="上班"Thenrrr=0.6*tatolElseIfrr="加班"Thenrrr=0.5*tatolElseIfrr="休息日"Thenrrr=0.9*tatolEndIfEndFunction(如图9)。
图9
这时关闭编辑器,只要我们在相应的列中输入rrr(F2,B2),那么打完折后的金额就算出来了(如图10)。
图10
7、矩阵计算
Excel的强大计算功能,不但能够进行简单的四则运算,也可以进行数组、矩阵的计算。
(1)数组和矩阵的定义
矩阵不是一个数,而是一个数组。
在Excel里,数组占用一片单元域,单元域用大括号表示,例如{A1:
C3},以便和普通单元域A1:
C3相区别。
设置时先选定单元域,同时按Shift+Ctrl+Enter键,大括弧即自动产生,数组域得以确认。
一个单元格就是一个变量,一片单元域也可以视为一组变量。
为了计算上的方便,一组变量最好给一个数组名。
例如A={A1:
C3}、B={E1:
G3}等。
数组名的设置步骤是:
选定数组域,单击“插入”菜单,选择“名称”项中的“定义”命令,输入数组名,单击“确定”按钮即可。
更简单的命名办法为:
选择数组域,单击名称框,直接输入名称就行了。
矩阵函数是Excel进行矩阵计算的专用模块。
用“插入”-“函数”命令打开“粘贴函数”对话框(如图11),选中函数分类栏中的“数学与三角函数”,在右边栏常用的矩阵函数有:
MDETERM——计算一个矩阵的行列式;MINVERSE——计算一个矩阵的逆矩阵;MMULT——计算两个矩阵的乘积;SUMPRODUCT——计算所有矩阵对应元素乘积之和。
图11
(2)矩阵的基本计算
数组计算和矩阵计算有很大的区别,比如下面这个例子中,A和B都是定义好的数组,因为这两个数组都是3×3的,输出结果也是3×3个单元格。
计算时先选定矩阵计算结果的输出域,为3×3的单元格区域,然后输入公式。
如果输入“=A+B”或“=A-B”,计算结果是数组对应项相加或相减,输入“=A*B”表示数组A和B相乘,输入“=A/B”表示数组A除数组B。
如果要进行矩阵计算,就要用到相应的矩阵函数。
矩阵相加、相减与数组的加减表达形式是一样的,也是“=A+B”和“=A-B”,表示矩阵相乘可以输入“=MMULT(A,B)”,而矩阵相除是矩阵A乘B的逆矩阵,所以计算公式是“=MMULT(A,MINVERSE(B))”。
公式输入后,同时按Shift+Ctrl+Enter键得到计算结果。
对于更复杂的矩阵计算,可以采用分步计算.
Excel自定义函数的妙用
我们在编辑Excel工作表时,除了可以用其内置的函数处理表中的数据外,还可以根据自己的实际需要,自定义函数来处理表中的数据。
如图1所示是一个学生基本情况登记表,学号的编制原则是:
前4位是年份,第5位是初、高中代码(1是初中,2是高中),第6位是年级代码(1分别代表初、高一等),第7、8位是班级代码,后面是序号。
下面,我们以一个具体的实例,自定义一个函数,根据学号来自动填写班级名称(即图中的D列内容)。
1.启动Excel 2003(其它版本请仿照操作),打开相应的工作表。
2.执行“工具→宏→Visual Basic编辑器”命令(或者直接按“Alt+F11”组合键),进入Visual Basic编辑状态(如图1)。
图1 编辑器
3.执行“插入→模块”命令,插入一个新模块。
再双击插入的模块,进入模块代码编辑状态。
4.将下列代码输入其中:
Function bj(xh)
Select Case Mid(xh, 5, 1)
Case 1
bj = "初" && Mid(xh, 6, 3) && "班"
Case 2
bj = "高" && Mid(xh, 6, 3) && "班"
End Select
End Function
[友情提醒]
①上述代码中,“bj”是函数命令,“xh”是变量名称,二者均可以随意修改。
②自定义函数结构是(如果有多个变量,请用英文状态下的逗号分隔):
Function 函数名称(变量名称)
代码
End Function
③使用下面的代码,可以达到同样的效果:
Function bj(xh)
If Mid(xh, 5, 1) = 1 Then
bj = "初" && Mid(xh, 6, 3) && "班"
Else
bj = "高" && Mid(xh, 6, 3) && "班"
End If
End Function
5.代码输入完成后,关闭Visual Basic编辑窗口,返回Excel编辑状态。
6.选中D2单元格,输入公式:
=BJ(A2),再用“填充柄”将上述公式复制到D列下面的单元格区域中,班级名称即可自动填入相应的单元格中(参见图2)。
Excel自定义函数在水文计算中的应用一例
摘要:
通过对Excel的认真学习与实践,利用其脚本语言VBA,编写了直线内查自定义函数,将其应用于实际工作,大大提高了工作效率,解决了工作中诸多直线内查难题,在Excel对数据自动化处理中起到了一定的作用,可广泛应用于水文工作及其以外的直线内查数据处理。
关键词:
Excel自定义函数水文工作应用
1. 前言
Excel虽然提供了丰富的内置函数,可以简便、快捷地进行各种数据运算、处理、分析,但要满足我们实际工作的需要还是很不够的,如果能利用Excel提供的内置函数、VBA语言、模块功能编写自定义函数,将会使我们的工作达到事半功倍的效果。
为此,我经过多年对Excel认真学习与实践编写了很多与实际工作紧密联系的自定义函数,具有广泛应用价值的是直线内查函数,笔者愿将其进行详细阐述与Excel爱好者共同分享、探讨。
2. 模块的建立、直线内查函数的编写及适用条件
打开Excel电子表格依次点击菜单栏上的【工具】【宏】【VisualBasic编辑器】进入VBA语言编写界面,再依次点击菜单栏上的【插入】【模块】向界面中插入模块,点击模块文件夹中的模块1,在模块1中编写如下代码:
PublicFunction直线内查(x,y,z)
Ifx=""Then
MsgBox"请输入查询值!
","提示!
"
Else
直线内查=Application.WorksheetFunction.Lookup(Application.WorksheetFunction.Index(y,Application.WorksheetFunction.Match(Application.WorksheetFunction.Lookup(x,y,z),z,0)),y,z)+(Application.WorksheetFunction.Lookup(Application.WorksheetFunction.Index(y,Application.WorksheetFunction.Match(Application.WorksheetFunction.Lookup(x,y,z),z,0)+1),y,z)-Application.WorksheetFunction.Lookup(Application.WorksheetFunction.Index(y,Application.WorksheetFunction.Match(Application.WorksheetFunction.Lookup(x,y,z),z,0)),y,z))*(x-Application.WorksheetFunction.Index(y,Application.WorksheetFunction.Match(Application.WorksheetFunction.Lookup(x,y,z),z,0)))/(Application.WorksheetFunction.Index(y,Application.WorksheetFunction.Match(Application.WorksheetFunction.Lookup(x,y,z),z,0)+1)-Application.WorksheetFunction.Index(y,Application.WorksheetFunction.Match(Application.WorksheetFunction.Lookup(x,y,z),z,0)))
EndIf
EndFunction
函数中包含3个参数,也称自变量,x—表示已知变量;y—表示已知变量所在的数组;z—表示函数(直线内查值)所在的数组。
此函数的适用条件是自变量x所在数组y必须是升序排列。
3. 函数的保存与加载
当函数编写好后应保存成“MicrosoftOfficeExcel加载宏(*.xla)”形式,命名为“直线内查函数”并保存在默认的C:
\DocumentsandSettings\Administrator\ApplicationData\Microsoft\AddIns文件夹中(也可保存在其它文件夹中)。
当函数保存好后,打开Excel工作薄,依次点击菜单上的【工具】【加载宏…】,打开加载宏窗体,勾选“直线内查函数”,然后单击“确定”,至此自定义函数加载完毕。
4. 直线内查函数在水文计算中的应用
4.1函数在流量计算表中的应用
由于计算机的广泛应用也逐渐普及到了水文测站,