从UDF返回范围而不是数组

时间:2017-02-09 17:11:31

标签: arrays excel vba excel-vba user-defined-functions

我创建了一个UDF,它将各种值,范围和数组输入合并到一个数组中。 Array Formula

ctrl shift 输入将其作为数组公式输入,表示VALUE(F4:G4)返回数组{1,#VALUE}。 我的公式将值(5,“cat”),范围(“F6”,“B2:D6”)和偶数数组(如Value()返回的数组)对齐,并输出数组。在

的图像示例中
{0.283982519688569,0.161633595994901,0.521865473646119,0.675542592903341,0.119984734979722,0.842918190377968,0.882045093468071,0.57708164295789,0.305844376489788,0.365360349735221,0.131686453379672,0.557018723742854,0.511032693705543,0.746174410924489,0.863516943921978,5,"cat","Dog",1,#VALUE!}

以下是代码:

Public Function PROBABLY(ParamArray inputArray() As Variant) As Variant
'Takes a list of parameters, the first of which is an integer, and
Dim inElement As Variant
Dim outputArray() As Variant
Dim subcell As Variant
'convert ranges to values
'creating a new array from the mixture of ranges and values in the input array
ReDim outputArray(0)
For Each inElement In inputArray
'Normal values get copied from the input UDF to an output array, ranges get split up then appended
    If TypeName(inElement) = "Range" Or TypeName(inElement) = "Variant()" Then
        For Each subcell In inElement
            outputArray(UBound(outputArray)) = subcell
            ReDim Preserve outputArray(UBound(outputArray) + 1)
        Next subcell
    'Stick the element on the end of an output array
    Else
        outputArray(UBound(outputArray)) = inElement
        ReDim Preserve outputArray(UBound(outputArray) + 1)
    End If
Next inElement
ReDim Preserve outputArray(UBound(outputArray) - 1)
PROBABLY = outputArray
End Function

这只是为了展示具有各种输入的公式的多功能性,实际上我不想在数组公式中使用它。 =PROBABLY(B2:D6,5,"cat")可以正常输入,没有 ctrl shift 输入。但问题是这会返回一个Variant() - 特别是一个数组*,这使得很难使用非数组公式,这通常需要Range输入。因此=CONCAT(PROBABLY(B2:D6,5))工作正常,但SUMIF(PROBABLY(B2:D6,5),">.5")不起作用,因为SUMIF()需要范围输入。同样的原因SUMIF(VALUE(1,2),">.5")不起作用,就像我的函数一样,value返回一个数组。

所以问题:我可以欺骗 Excel认为我的数组是一个范围,以某种方式将其格式化为范围。显然,我可以将代码从UDF中取出并转换为子代码,然后将我的数组粘贴到临时电子表格范围中并告诉excel引用它,但我希望保留UDF包装器。 (我不认为我可以在UDF中编辑工作表,虽然是否有一些隐藏空间可以粘贴数组并从公式中访问它?

在那里大声思考,有什么更好的见解吗?

*因此()

之后Variant

0 个答案:

没有答案