一、自定义函数
1、基本结构
Function 函数名称(参数 as 数据类型,参数2等..) as 函数返回值数据类型
'主体代码
'函数名称 = 返回的值或数值
End Function
2、关键词
(1)Category
'自定义函数分类:Category:=4用于在设置在函数公式分类里面的类别
0=全部
1=财务
2=日期和时间
3=数学和三角
4=统计
5=查找和应用
6=数据库
7=文本
8=逻辑
9=信息
等….例:
Application.macro options "函数名" category:= 4 '将"函数名"自定义函数分类设置为统计
(2)Optional
代表可以略省此参数,可在参数后用:=来设置如缺省默认值为多少
例:
Function jiequ(jiestring as string,jiena as string,optional najie as long =1)
(3)ParamArray
代表可以设一个或者多个值或区域,类似于工作表函数sum()里面的参数
例:
Function hebing(ParmArray hebingstr as string())
3、加载自定义函数
怎么在日常使用:首先将带有自定义函数的工作本另存为加载宏格式(xlam)
然后通过选项/或开发工具----加载宏----浏览对应带有自定义函数的文件----确定
确定后以后打开工作本都会隐藏式启动带有自定义函数的那个表,在开发工具工程里可以看到,本机上启用了一个默认的Solver的加载宏.
二、实例
1、不带参数的自定义函数
Function thiswbname() As String '不带参数的自定义函数
Dim str1 As String '定义一个文本类型
str1 = ThisWorkbook.Name '返回该工作本的名子
thiswbname = str1 '返回值给函数
End Function
2、带参数,但又可省略的自定义函数
Function thiswbname2(Optional a As Boolean = False) '带参数,但又可省略的自定义函数
Dim str2 As String
If a = True Then '参数a = true 时
str2 = ThisWorkbook.Path '返回带路径的文件名
Else
str2 = ThisWorkbook.Name '否则只返回文件名
End If
thiswbname2 = str2
End Function
3、单参数或多参数的自定义函数
Function hebingstr(ParamArray m()) As String '类似SUM()那个可多区域连接的合并文本自定义函数
Dim str2, str3 As String
Dim x2 As Integer, x3 As Integer
x2 = UBound(m, 1) - LBound(m, 1) + 1 '取得有多少个参数
For x3 = 1 To x2
If Not IsArray(m(x3 - 1)) Then '参数不是数组的直接连接字符串
str3 = str3 & m(x3 - 1)
Else
For Each str2 In m(x3 - 1) '参数为多个的循环连接
str3 = str3 & str2
Next
End If
Next
hebingstr = str3 '赋值给公式返回值
End Function
测试结果跟测试数据表格行列分布:
4、返回数组的自定义函数
Function fgstr(fengestr, fenge) '自定义也可以返回数组
fgstr = Split(fengestr, fenge) '把VBA.SPLIT的功能建立到函数使用,分割后返回的是数组形式
End Function