如何在Excel-VBA中的用户定义函数中传递结果数组?

时间:2018-06-13 09:48:04

标签: excel vba

我正在检查是否有任何方法可以在UDF中传递结果数组。

如果我传递一个范围,我的函数正在按预期工作,例如 - $A$2:$A$5,但是如果我在传递范围之前进行数组计算则没有,例如 - IF($A$2:$A$5 < 3, $A$2:$A$5 ,"")带控制+ shift +输入

enter image description here

这是我正在使用的代码 -

Public Function ReverseTextToColumns(Rg As Range, Optional D As String = " ") As String
  Dim xArr
  xArr = Application.WorksheetFunction.Transpose((Rg.Value))
  ReverseTextToColumns = Join(xArr, D)
End Function

我不想创建一个复杂的函数,只是想知道如何在UDF中传递结果数组。

2 个答案:

答案 0 :(得分:0)

将第一个参数传递为Variant并删除.Value

Option Explicit
Public Function ReverseTextToColumns(n As Variant, Optional D As String = " ") As String
    Dim xArr
    xArr = Application.WorksheetFunction.Transpose((n))
    ReverseTextToColumns = Join(xArr, D)
End Function

单:

Worksheet

答案 1 :(得分:0)

问题似乎是这种情况:

$A$2:$A$5 < 3

返回FALSE,这意味着将空字符串""传递给函数。这与参数的类型不兼容 - Range;以下功能:

Function TestRng(rng As Range) As Boolean
    TestRng = True
End Function

在公式中使用时也会返回#VALUE!

=TestRng("")

我建议您创建Variant类型的参数,并使用UDF中的VBA TypeName函数来检查它是否实际上是Range

NB。你究竟是针对这种情况 - $A$2:$A$5 < 3?将一系列细胞与数字进行比较是什么意思?