①新插入一个标准模块;
②插入一个空的Function过程;
③写入相应的代码。
注意:最后一定要将结果返回给过程名。
扩展:什么是自定义函数
自定义函数就是用户自己编写的函数。在VBA中,自定义函数就是一个Function过程。在vba 系统中,系统也提供了相当多的vba 系统函数,如instr,cstr,val 等系统函数。
语法结构,同Sub类似。
[Public]、[Private]、[Static] Function 函数名([参数])[As数据类型]
[语句块]
[函数名=过程结果]
[Exit Function]
语句块
[函数名=过程结果]
End Function
公有与私有自定义函数的区别:同sub相似,私有的只能在当前模块中过程中调用,而且在插入函数中不可见此函数名。
你这个要求不能实现啊,我用了ParamArray 关键字,用来指定一个 任意元素个数 的数组
共参考:
---------
Function shuzu(ParamArray x())
ApplicationVolatile
Dim i, n, m, tmp
n = UBound(x) - LBound(x) + 1
If n Mod 2 <> 0 Then tmp = "#Err_x()": GoTo 1000
n = n / 2
m = LBound(x)
For i = 1 To n
tmp = tmp + x(m + i - 1) x(m + i - 1 + n)
Next
1000:
shuzu = tmp
End Function
-----------
输入公式的时候,需要 成对 的元素,套用你的公式如下:
=shuzu((K5,L5,M7,N9),(M13,L15,K13,M17))
可以输入任意 成对的 元素,比如使用10个参数:
=shuzu((K5,L5,M7,N9,M10),(M13,L15,K13,M17,N20))
vba代码可以实现,但是比较繁琐(新手),可以用office的定义名称来实现。
要借助空白区域,在空白的任意一个单元格(我的是a8)插入——名称,
(2003版本的是插入——名称,2007版本的是公式——定义名称),名称写col,引用位置上写=GETCELL(63,Sheet2!A2:E3),,(a2:e3表示是有颜色的区域,图中456行的颜色是我后面加的确定,)关闭,在a8处写=col,回车得到一个数字55(这个数字就是当前a2单元格的背景颜色代码),然后拖动单元格到和元数据单元格区域大小,2003版的按f9刷新,2007版的不用。然后在f2那些写=sumif(a8:e8,55,$a$1:$e$1),回车,向下拖动公式就可以了。($a$1:$e$1表示绝对引用需要做加运算的数字区域)
传布上来。。。。。。
窗体放一个Label和一个Command,代码如下:
Private Sub Command1_Click()
Dim i, a(19), max, min, sum, a1, a2, a3, a4, a5 As Integer
Label1Caption = ""
Randomize
Label1Caption = "20名学生成绩:" & vbCrLf
For i = 0 To 19
a(i) = Int(Rnd 101)
Label1Caption = Label1Caption & a(i) & IIf(i = 19, vbCrLf, ",") & IIf(i = 9, vbCrLf, "")
If i = 0 Then
max = a(i)
min = a(i)
Else
If a(i) < min Then min = a(i)
If a(i) > max Then max = a(i)
End If
sum = sum + a(i)
Select Case a(i)
Case 0 To 59
a1 = a1 + 1
Case 60 To 69
a2 = a2 + 1
Case 70 To 79
a3 = a3 + 1
Case 80 To 89
a4 = a4 + 1
Case 90 To 100
a5 = a5 + 1
End Select
Next i
Label1Caption = Label1Caption & "最高分=" & max & vbCrLf
Label1Caption = Label1Caption & "最低分=" & min & vbCrLf
Label1Caption = Label1Caption & "平均分=" & Format(sum / 20, "000") & vbCrLf
Label1Caption = Label1Caption & "0 - 59分人数:" & a1 & vbCrLf
Label1Caption = Label1Caption & "60 - 69分人数:" & a2 & vbCrLf
Label1Caption = Label1Caption & "70 - 79分人数:" & a3 & vbCrLf
Label1Caption = Label1Caption & "80 - 89分人数:" & a4 & vbCrLf
Label1Caption = Label1Caption & "90 - 100分人数:" & a5 & vbCrLf
Call paixu(a)
Label1Caption = Label1Caption & "排序后20名学生成绩:" & vbCrLf
For i = 0 To 19
Label1Caption = Label1Caption & a(i) & IIf(i = 19, vbCrLf, ",") & IIf(i = 9, vbCrLf, "")
Next
End Sub
Private Sub Form_Load()
Label1Move 0, 0, MeWidth
Label1AutoSize = True
Label1Caption = ""
End Sub
Private Sub paixu(b() As Variant)
Dim i As Integer, x As Integer
For i = LBound(b) To UBound(b)
For j = LBound(b) To i
If b(j) < b(i) Then x = b(i): b(i) = b(j): b(j) = x
Next
Next
End Sub
思路:把范围内的所有数先按大小排一下序,那最大两个数的和肯定是“任意两个值的和的最大值”
Function
RangeCount(XRan
As
Range)
As
Integer
Dim
i
As
Integer
Dim
j
As
Integer
Dim
k
As
Integer
Dim
a()
As
Integer
'
取值
ReDim
a(XRanCount)
k
=
1
For
j
=
1
To
XRanColumnsCount
For
i
=
1
To
XRanRowsCount
a(k)
=
XRanCells(i,
j)
k
=
k
+
1
Next
i
Next
j
'
排序
For
i
=
1
To
XRanCount
-
1
For
j
=
1
To
XRanCount
-
i
If
a(j)
>
a(j
+
1)
Then
k
=
a(j)
a(j)
=
a(j
+
1)
a(j
+
1)
=
k
End
If
Next
j
Next
i
'
返回值
RangeCount
=
a(XRanCount)
+
a(XRanCount
-
1)
End
Function
vba中formulaarray函数如何自定义步骤如下:
1、想自定义函数,需要进入VBA环境。打开Excel选项窗口,切换到自定义功能区选项卡,勾选开发工具选项。点击确定按钮。
2、在Excel程序主界面中,切换到开发者选项选项卡,点击点击VisualBasic按钮进入。
3、在VBA环境中,右击工作表,选择插入-模块项。
4、对应的自定义函数完成后,点击VBA界面中的Excel视图即可返回。
function F(rng as range) as String
if rngcount <>5 then F="Err":exit function
dim a(4) as double,b as integer
dim cel as range
for each cel in rng
a(b)=val(celvalue)
b=b+1
next
F = a(0) + a(1)a(2) + a(3) + a(4)
end function
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)