Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 28711|回复: 39

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

[复制链接]
发表于 2010-3-8 20:09 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2013-4-21 11:14 编辑


Function test(a, b, c)

'其他代码
'其他代码
'其他代码
'其他代码
'其他代码


'结束前,把希望返回的值,赋给自定义函数名test,即可。

End Function

我只知道,这样就可以得到一个返回值。但如果一次需要从这个自定义函数中返回2个或多个值的话,该怎么办呢?

谢谢!

最佳答案
2010-3-8 20:38

看都返回了些啥:

Function test1(a)
Select Case a
  Case 1
    test1 = Array(1, 2, 3, 4, 5, 6)
  Case 2
    Dim d As New Dictionary
    d(1) = "a"
    d(2) = "b"
    Set test1 = d
  Case Else
    test1 = "asdfg" & "|" & "123456"
End Select
End Function
Sub ta()
Dim arr1, x%
x = 1
arr1 = test1(x)
MsgBox Join(arr1, ",")
x = 2
Set arr1 = test1(x)
MsgBox Join(arr1.Keys, ",")
x = 3
arr1 = test1(x)
MsgBox Split(arr1, "|")(0)
MsgBox Split(arr1, "|")(1)
End Sub

etc.

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-3-8 20:11 | 显示全部楼层

不知道啊,我用得不多。我曾经想返回一个数组也没得到。

回复

使用道具 举报

发表于 2010-3-8 20:18 | 显示全部楼层

爱疯我帮你顶顶!

爱疯我帮你顶顶!等高手出现!
回复

使用道具 举报

发表于 2010-3-8 20:21 | 显示全部楼层

不知道2个或多个值具体是什么样子的,但得到一个内存数组应该是可以的:

Function XXX(c As Range)
XXX = c
End Function

在参数C为一个单元格区域时,返回的是一个内存数组,不知道是不是这样

回复

使用道具 举报

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

谢谢各位!

枯禅的这个想法,有趣,学习[em01]

我想,还是很可能遇上这样的时候,再看一下吧

 

[em26][em26]
回复

使用道具 举报

发表于 2010-3-8 20:31 | 显示全部楼层

如果该函数应用在工作表中,是没法返回多个数值的,除非如枯禅说的数组函数。

如果该函数应用在vba程序中,是可以变通返回多个数值的,利用 byref 参数就可以了。

回复

使用道具 举报

发表于 2010-3-8 20:38 | 显示全部楼层    本楼为最佳答案   

看都返回了些啥:

Function test1(a)
Select Case a
  Case 1
    test1 = Array(1, 2, 3, 4, 5, 6)
  Case 2
    Dim d As New Dictionary
    d(1) = "a"
    d(2) = "b"
    Set test1 = d
  Case Else
    test1 = "asdfg" & "|" & "123456"
End Select
End Function
Sub ta()
Dim arr1, x%
x = 1
arr1 = test1(x)
MsgBox Join(arr1, ",")
x = 2
Set arr1 = test1(x)
MsgBox Join(arr1.Keys, ",")
x = 3
arr1 = test1(x)
MsgBox Split(arr1, "|")(0)
MsgBox Split(arr1, "|")(1)
End Sub

etc.

回复

使用道具 举报

发表于 2010-3-8 20:52 | 显示全部楼层

好好学习天天向上

[em01][em01]
回复

使用道具 举报

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

QUOTE:
以下是引用老申在2010-3-8 20:31:00的发言:

如果该函数应用在工作表中,是没法返回多个数值的,除非如枯禅说的数组函数。

如果该函数应用在vba程序中,是可以变通返回多个数值的,利用 byref 参数就可以了。

谢谢老申的指点!

自定义函数,“名正言顺”规定只返回一个函数值(不知这么说对不对)。

假如我是开发者,我肯定会想到,以后一定会遇上返回多个值的应用。可事实,并没有象返回一个值那样,允许自定义函数返回多个值?是和什么有关,不得不如此?! ....  以致放弃一个给用户带来巨大方便的设定(我瞎想的)

也许,只能如老申所说变通的得到多个值,可为什么不能“名正言顺”,还是无法让我不瞎想。。。。 [em11]

回复

使用道具 举报

 楼主| 发表于 2010-3-8 21:04 | 显示全部楼层

QUOTE:
以下是引用青城山苦丁茶在2010-3-8 20:38:00的发言:

看都返回了些啥:

Function test1(a)
Select Case a
  Case 1
    test1 = Array(1, 2, 3, 4, 5, 6)
  Case 2
    Dim d As New Dictionary
    d(1) = "a"
    d(2) = "b"
    Set test1 = d
  Case Else
    test1 = "asdfg" & "|" & "123456"
End Select
End Function
Sub ta()
Dim arr1, x%
x = 1
arr1 = test1(x)
MsgBox Join(arr1, ",")
x = 2
Set arr1 = test1(x)
MsgBox Join(arr1.Keys, ",")
x = 3
arr1 = test1(x)
MsgBox Split(arr1, "|")(0)
MsgBox Split(arr1, "|")(1)
End Sub

etc.

谢谢青城山!

这样依次返回了:1个数组、1个字典(test1 = d,第1次看到,还可以这样[em06])、1个字符串。对么。

这个示例,意味着自定义函数可以完成返回多个值的需要,只是采取变通方式、再加工。可,可为什么非要如此 。。。。

[em11]

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 09:06 , Processed in 0.532772 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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