Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 爱疯

[已解决]Function可以返回2个或多个值么?

[复制链接]
发表于 2010-3-9 17:58 | 显示全部楼层

QUOTE:
以下是引用爱疯在2010-3-9 13:47:00的发言:

不明白GeV20和吕布的意思 。。。 也是说,按值传递(byval)属于变通的方式之一,是这意思么 ?[em04]

举个例子,不一定恰当

 

Option Explicit

Function HasOnlyOneSolution(ByVal a As Long, ByVal b As Long, ByVal c As Long, x As Long) As Boolean
    '解方程:ax^2+bx+c=0
    If b * b = 4 * a * c Then
        x = b / (2 * a)
        HasOnlyOneSolution = True
    End If
End Function

Sub Test()
    Dim lX As Long
    ' 象这种要先进行判断,符合要求再进行操作的情况我想这样可能最合理,最明了
    If HasOnlyOneSolution(1, 4, 4, lX) Then MsgBox "方程有唯一解:" & lX
End Sub
回复

使用道具 举报

发表于 2010-3-9 19:16 | 显示全部楼层

没什么变不变通的,当定义一个函数时,所定义的函数名就相当于一个中间变量,既然是变量,

可以是String,可以是变体,可以是一个数组或对象等等VBA中所允许的一切类型:

Function fc() As String

Function fc() As Variant

Function fc() As Integer()

Function fc() As Range

当返回值是一个数组是,可以返回多少个值呢,只要你电脑内存足够,理论上可以根据需要返回无限个值

如:

Function fc() as Integer()
fc = [{1,2,3;4,5,6}]
End Function
Sub f()
Dim a() As Integer
a = fc

End Sub

[此贴子已经被作者于2010-3-9 19:17:23编辑过]
回复

使用道具 举报

 楼主| 发表于 2010-3-9 19:17 | 显示全部楼层

谢谢吕布!

学习了,还可以这样啊。不过,21示例感觉象是:如果冒险(执行自定义函数成功的话),那么就冒险(执行自定义函数) 。。。。 不知怎么说好[em04]

20楼的疑惑,也许没什么原则好证明吧。能肯定的是,从各位的指点中再次证明,事实上自定义函数可以“千变万化”的完成返回多个值的需求。

 

 

[em27][em27]
回复

使用道具 举报

 楼主| 发表于 2010-3-9 19:44 | 显示全部楼层

谢谢飞版!

还是不能认为自定义函数就是1个变量吧,比如:

 


Sub a()
    Dim arr

    Call b(5)
    ReDim arr(b)
    Stop
    
End Sub

Function b(x)
    b = x + 1
End Function

 

这里,自定义函数b,就不能象变量一样用啊。[em09]

回复

使用道具 举报

发表于 2010-3-9 19:50 | 显示全部楼层

这样才可以。
Sub a()
    Dim arr

    ReDim arr(b(5))
    Stop
    
End Sub

Function b(x)
    b = x + 1
End Function

直接使用arr(b)是因为没有参数传递给自定义函数b.
回复

使用道具 举报

发表于 2010-3-9 19:51 | 显示全部楼层

关于自定义函数返回多少个数值,飞翔的应该是正解
回复

使用道具 举报

发表于 2010-3-9 19:51 | 显示全部楼层

Sub a()
    Dim arr
    ReDim arr(b(5))
    Stop
   
End Sub

Function b(x)
    b = x + 1
End Function

回复

使用道具 举报

发表于 2010-3-9 19:53 | 显示全部楼层

楼上回了,很久不见八月版主。。。

回复

使用道具 举报

 楼主| 发表于 2010-3-9 20:12 | 显示全部楼层

谢谢八月院长、飞版!

学习了!

平时,用惯sub了,所以看到function,不自己就迟钝些了。这样总结对么?

在外,必须全副武装(带参),如 ReDim arr(b(5));

在内,摘盔卸甲也可(不带参),如 b = x + 1。也可带参,如 b(x) = x + 1。

 

PS:加粗部分,没把握 [em04]

回复

使用道具 举报

发表于 2010-3-9 21:06 | 显示全部楼层

QUOTE:
以下是引用HYY514在2010-3-9 19:53:00的发言:

楼上回了,很久不见八月版主。。。

是很久没来了。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-18 20:05 , Processed in 0.353703 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表