Funcation过程同Sub过程一样,都是保存在模块中。
步骤:
插入模块--插入过程--具体如下:
eg:
Public Funcation Fun() '想让函数完成什么计算,就将对应的代码在开始语句和结束语句之间。
Fun=Int(Rnd()*10)+1 '无论Funcation过程包含多少代码,要执行多少计算,都应该将最后的计算结果保存在过程名称中,这一步必不可少。
End Function
每个函数都有返回结果,在VBA中,最后保存在Funcation过程名称中的数据就是这个自定义函数返回的结果。
自定义函数的使用
在工作表中使用自定义函数,同使用工作表函数的方法相同。
因为上述在定义fun()函数时没有给它设置参数,所以在使用时不用给它设置参数,但应在函数名称后面写上一对空括号。
=fun()
如果自定义的函数(Funcation过程)没有被定义为私有过程,那我们可以通过【插入函数】对话框找到并使用自定义函数。 步骤:公式--插入函数--用户自定义
同Excel自带的工作表函数一样,自定义的函数可以和其他函数嵌套使用。
=CHAR(65+fun())
在VBA过程中使用自定义函数与使用VBA的内置函数一样,示例代码如下。
Sub msg()
MsgBox Fun()
End Sub
例:用自定义函数统计指定颜色的单元格个数
VBA中有一个叫RGB函数,通过红(R)、绿(G)、蓝(B)的具体数值来控制这3种颜色所占的比例。从而得到不同的颜色。
黄色:=RGB(255,255,0)
range("A1").Interior.Color=RGB(255,255,0)
1.如果想知道A1单元格的底纹是不是黄色,只需要判断Range("A1").Interior.Color的属性值是否等于RGB(255,255,0)即可。
Funcation CountColor()
If Range("A1").Interior.Color=RGB(255,255,0) Then
CountColor=1
Else
CountColor=0
End If
End Funcation
2.怎样统计区域中黄色单元格的个数
Function CountColor()
Dim rng As Range
For Each rng In Range("A1:A10")
If rng.Interior.Color=RGB(255,255,0) Then
CountColor=CountColor+1
END If
Next rng
End Function
使用该自定义函数:
=countcolor()
3.用参数指定要统计的单元格区域
通过函数参数指定要统计的单元格区域,这样的函数会更适用。
如果想让自定义的函数也能通过参数指定的统计区域,可以用变量来代替过程中的Range("A1:A10")。
Function CountColor(arr As Range)
Dim rng as range
For each rng in arr '利用For Each语句依次判断arr变量,即函数参数指定区域中每个单元格的底纹颜色是否是黄色
If rng.Interior.Color=RGB(255,255,0) Then
CountColor=CountColor+1 '自定义函数返回的结果,就是保存到Function过程名称中的数据
End If
Next rng
End Funcation
注:指定函数的参数是Range类型的变量,在使用函数时,函数的参数就只能设置为单元格区域。
函数的使用:
=count color(A1:B10)
4.通过参数指定要统计的颜色
如果想让函数能统计区域中任意颜色,还可以给自定义的函数设置第2个参数,通过第2参数指定要统计的颜色。
Function CountColor(arr As Range,c As Range)
Dim rng As Range
For Each rng In arr
If rng.Interior.Color=c.Interior.Color Then
CountColor=CountColor+1
End If
Next rng
End Function
函数的两个参数都是Range类型的变量,使用时只能将参数设置为单元格区域。其中,第1参数是要统计的单元格区域,第2参数是包含目标颜色的单元格。
计算时,函数将统计第1参数中与第2参数的单元格底纹颜色相同的单元格个数。
函数使用:
=countcolor(A1:C10,E1)
如果需要,还可以为自定义函数添加第3参数,第4参数...
5.设置易失性函数,让自定义函数也能重新计算
如果想让工作表重新计算后,自定义的函数也能随之重新计算,就应该将自定义函数定义为易失性函数。
要把一个自定义函数定义为易失性函数,只需在Function过程开始时添加一行代码即可。
Application.Volatile True
eg:
Public Function Fun()
Application.Volatile True
Fun=Int(Rnd()*10)+1
End Function
如果将自定义函数设置为易失性函数,无论工作表中哪个单元格重新计算,易失性函数都会重新计算。非易失性函数只有函数的参数发生改变时才会重新计算。
因为任意单元格重算都会引起易失性函数重新计算,所以大量使用易失性函数也会增加表格的计算量,影响表格的重算速度。
因此,除非必须需要,否则不建议将自定义函数定义为易失性函数。
声明Function过程的语句结构
[Public|Private] [Static] Function 函数名([参数列表]) [As 数据类型]
[语句块]
[函数名=过程结果]
[Exit Function]
[语句块]
[函数名=过程结果]
End Function
定义Function过程的语句同定义Sub过程的语句类似。同Sub过程一样,Function过程也分为公共过程和私有过程,如果想要声明一个私有过程,就一定要加上Private关键字。