Excel是大家非常熟悉的应用软件,其使用非常方便。尤其是其强大的函数功能,为我们带来了极大方便,但有时我们为实现一项规定的功能,可能用到几个函数或者采用嵌套函数,这样应用起来,也不太方便;或者使用自定义公式进行计算,就没有现成的公式可用。可喜的是,我们可以创建自定义函数UDF(User—defined function),它的运行与Excel中自带的函数完全相同。建立自定义函数有以下几个优点:建立自己特殊的功能和名称的函数;能将复杂的、嵌套的、多个原有的函数组合在一起,发挥更大的威力,使用、维护更加方便。
比如在水质计算中,高锰酸盐指数的计算公式非常繁琐,而且含必须将结果修约至0.1,还得考虑逢5奇进偶舍的问题。利用计算器逐步计算很是麻烦;在EXCEL中利用单元格引用计算稍有不注意,可能造成计算上差错,而且每次都得建立,很不方便。现在我们利用EXCEL自带的VBA编辑器建立自己的函数来解决这个问题。
首先进入Excel,在[工具]→[宏]→[Visul Basic编辑器](也可按组合键[Alt+F11]),在“Visul Basic编辑器”中选择[插入]→[添加模块],将模块名称改为“高锰酸盐指数浓度计算公式”,在代码窗口输入下列函数:
Public Function CImn(C As Single, V0 As Single, V1 As Single, V2 As Single, V As Integer)‘高锰酸盐指数计算公式
Dim DotLocation As Integer ‘定义小数点位置变量
‘*************************************************************************
CImn = ((((10 + V1) * 10 / V2 - 10) - (((10 + V0) * 10 / V2 - 10) * (100 - V) / 100))) * C * 8000 / V
‘*************************************************************************
‘保留一位小数
‘当CIMN值小于1时,自动补上个位0
If CImn < 1 Then
CImn = 0 & CImn
End If
‘确定小数点的位置
DotLocation = InStr(CImn, ".")
‘判断小数点后第二位是否为5
If Mid(CImn, DotLocation + 2, 1) = 5 Then
If Len(CImn) <= DotLocation + 2 And Mid(CImn, DotLocation + 1, 1) Mod 2 = 0 Then
CImn = Left(CImn, DotLocation + 1) ‘为5且5后没有数和5前一位为偶数,直接用round()函数修约
Else
CImn = Round(CImn, 1)
End If
Else
CImn = Round(CImn, 1) ‘不为5,直接用round()函数修约
End If
CImn = Format(Round(CImn, 1), "#0.0")
End Function
我们知道,Excel中函数都有一个说明用以帮助使用,我们也要给这个函数添加一个说明。在工具栏中选择“对象浏览器”(如图1),选择我们所做“高锰酸盐指数浓度计算公式”模块,在其[右键]→[属性]中添加关于对这个函数的描述,这个描述将出现在Excel中关于函数的说明中,如果你要对软件保密的话,在“模块”上按右键,[VBAproject属性]→[保护中设置密码],别人就看不到你的源程序了。
[img]20061196353043854.jpg[/img]
图1描述函数
这时,退出,回到Excel界面,将这个文件另存为:类型为“Microsoft Excel加载宏”,在Excel 2003中,它会自动更改保存位置为“C:Documents and Settingswzwemc(电脑用户名)Application DataMicrosoftAddIns” (系统装在c:\windows),当然,你也可以把这个文件“高锰酸盐指数浓度计算公式.xla”,直接复制到office\library(office的安装路径下),而在Excel 97中只能放在后一个位置。使用函数很简单,点击[工具]→[加载宏],在你创建的“高锰酸盐指数浓度计算公式”前打个勾,如图2。在单元格直接输入“=CImn()”,选中相应的参数即可(如图3)。是不是像Microsoft office提供的函数一样,很有点专业味道。
[img]20061196353547951.jpg[/img]
图2加载宏
[img]20061196354048237.jpg[/img]
图3使用自定义函数
假如你把调用这个宏的Excel文件拷贝到别的机子上运行,会出现“当前所要打开的文档含有其他文档的链接,是否要使用其他工作簿中的改动更新当前工作簿”的提示,可以显示原先计算的数据,这是因为在Excel中的[工具]→[选项]→[重新计算]中,一般选中“保存外部链接数据”,但你不能重新计算,因为不能链接这个宏,别人机子上根本就没有这个函数。
此外,我们还可以为“加载宏”添加相关说明,这样更有利于自定义函数的维护。(如图3),找到“高锰酸盐指数浓度计算公式.xla”,点击[右键]→[属性]→[摘要] (如图4),在描述里添加所需内容来对函数进行相关描述,其中“标题”部分将出现在“加载宏”的方框中,“备注”部分将出现在下面的函数说明部分。这时再看看,够不够专业。在Excel 97中也可以在其右键属性中作相应更改。
[img]20061196354450094.jpg[/img]
图4添加中文描述