vba 自定义函数

vba 自定义函数

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关键字。

相关推荐

揭秘生草乌,自然馈赠的神奇草药
365bet比分网

揭秘生草乌,自然馈赠的神奇草药

📅 10-05 👁️ 1787
证券转银行需要多久
365bet娱乐场平台

证券转银行需要多久

📅 09-23 👁️ 2050
POI使用指南
365bet的官网是多少

POI使用指南

📅 01-28 👁️ 5239
掌握WPS Office表格制作技巧:从安装到手动创建表格的完整指南 - WPS Office
赛尔号升级攻略:高效利用任务活动资源,加速成长之路
365bet的官网是多少

赛尔号升级攻略:高效利用任务活动资源,加速成长之路

📅 12-29 👁️ 9645
那个千百块贷款审核要多久
365bet娱乐场平台

那个千百块贷款审核要多久

📅 08-23 👁️ 216