一、题目:
要求编写一个可分别把指定单元格的内容作为批注写入活动单元格的自定义函数。
如果活动单元格里面没有批注就增加此批注;如果里面有批注就把批注修改为指定单元格的内容。
二、代码:
Function pizhu(ParamArray Rngs() As Variant)
Dim cel As Range, s$, singleArea,m%
For m = LBound(Rngs) To UBound(Rngs)
Set singleArea = Rngs(m)
For Each cel In singleArea
If cel <> "" Then
s = s & cel.Value & vbCrLf
End If
Next cel
Next m
With ActiveCell
If .Comment Is Nothing Then
.AddComment Text:=s
Else
.Comment.Text Text:=s
End Iffunction怎么记忆
End With
pizhu = ""
End Function
三、代码详解
1,Function pizhu(ParamArray Rngs() As Variant) :自定义函数的开始语句。自定义函数名称为pizhu,是“批注”的拼音字母,便于记忆;参数是单元格区域,一个数组变量Rngs()。使用关键字ParmArray说明的参数可在调用时接受传递给它的任何个数的参数。这些参数被放在一个可变类型数组中。如果未使用Option Base语句,数组的下界为0。要注意的是ParmArray 只能用于参数表的最后一个参数。
2、Dim cel As Range, s$, singleArea,m%  :声明变量cel为单元格区域对象,s为字符串数据类型,m为整型,为可变型数据类型。
3、For m = LBound(Rngs) To UBound(Rngs)  :
这是标准的For …Next循环语句,LBound和UBound是两个VBA函数,可求得数组的下界和上界,下界默认为0。
4、Set singleArea = Rngs(m)  :
把单元格区域逐个赋值给变量singleArea。
5、For Each cel In singleArea :
For Each…Next循环语句,对区域对象singleArea中的每个单元格cel对象作循环。
6、If cel <> "" Then :如果cel单元格不为空,那么执行下面的语句。
7、s = s & cel.Value & vbCrLf :把cel单元格的值加上换行符一起赋给变量s。第一次循环时,s为空值,以后随着循环而把区域内所有单元格的值一起赋给变量s。
8、With ActiveCell :使用With…..End With语句有三个优点:它可以减少代码的输入量;增加代码的可读性和改善代码的执行效率。它为我们提供了十分简便的对象引用手段。
9、If .Comment Is Nothing Then :如果活动单元格没有批注,那么执行下面的语句。
10、.AddComment Text:=s :使用区域对象的增加批注属性AddComment,批注文本等于变量s的值。
11、.Comment.Text Text:=s :否则使用区域对象的批注属性Comment,把原来的批注修改为新的文本等于变量s的值。
12、pizhu = "" :函数返回一个空值。
四、自定义函数用法
例如A1、B2和C3单元格里面不为空,活动单元格为D5。在D5里输入公式:=pizhu(A1,B2,C3)
或者输入:=pizhu(A1:F6)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。