VBA函数如何实现多值返回?能否通过函数.结果名形式调用指定结果?
问题解答
这种=My_Function.Result1(someinput)的调用方式不可行,Excel工作表函数不支持这种“函数名.属性名”的语法来直接返回指定结果。
下面提供几种实用的替代方案,满足你返回多个结果的需求:
方案1:通过参数指定返回结果
修改原函数,新增一个参数来指定要返回哪个结果,逻辑清晰且调用简单:
Function My_Function(someinput As Variant, resultType As String) As Variant ' 这里保留你的复杂计算逻辑,生成Result1~Result4 Dim Result1 As String, Result2 As String, Result3 As String, Result4 As String Result1 = "Result1" Result2 = "Result2" Result3 = "Result3" Result4 = "Result4" ' 根据参数返回对应结果 Select Case LCase(resultType) Case "result1" My_Function = Result1 Case "result2" My_Function = Result2 Case "result3" My_Function = Result3 Case "result4" My_Function = Result4 Case Else My_Function = "#无效类型" End Select End Function
单元格调用示例:
=My_Function(someinput, "Result1")
方案2:利用类模块封装结果(适合VBA内部调用+包装函数)
如果想把结果封装成对象属性,可通过类模块实现,但需要额外写包装函数供单元格调用:
- 插入类模块,命名为
CalculationResults,并添加属性定义:
Public Result1 As String Public Result2 As String Public Result3 As String Public Result4 As String
- 修改原函数返回类实例:
Function My_Function(someinput As Variant) As CalculationResults Dim results As New CalculationResults ' 复杂计算生成结果 results.Result1 = "Result1" results.Result2 = "Result2" results.Result3 = "Result3" results.Result4 = "Result4" Set My_Function = results End Function
- 写包装函数供单元格调用:
Function GetResult1(someinput As Variant) As String GetResult1 = My_Function(someinput).Result1 End Function Function GetResult2(someinput As Variant) As String GetResult2 = My_Function(someinput).Result2 End Function
单元格调用示例:
=GetResult1(someinput)
方案3:返回数组,用INDEX提取结果
让函数返回结果数组,再用Excel的INDEX函数提取指定位置的结果:
Function My_Function(someinput As Variant) As Variant ' 复杂计算生成结果 Dim Result1 As String, Result2 As String, Result3 As String, Result4 As String Result1 = "Result1" Result2 = "Result2" Result3 = "Result3" Result4 = "Result4" My_Function = Array(Result1, Result2, Result3, Result4) End Function
单元格调用示例(提取第1个结果):
=INDEX(My_Function(someinput), 1)
内容的提问来源于stack exchange,提问作者Jacco
相关产品推荐
相关产品推荐

