将值和范围的混合转换为UDF中的单个数组

我想build立一个Excelmacros中的另一个数组(特别是这个UDF)

Sub Call_Probably() 

Debug.Print PROBABLY(1,“a”,“b”,Range(“A2”,“A3”))En​​d Sub

 Public Function PROBABLY(ParamArray inputArray() As Variant) As String Dim inElement As Variant Dim outputArray() As Variant Dim subcell As Range '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" Then For Each subcell In inElement outputArray(UBound(outputArray)) = subcell ReDim Preserve outputArray(UBound(outputArray) + 1) Next subcell Else 'Stick the element on the end of an output array outputArray(UBound(outputArray)) = inElement ReDim Preserve outputArray(UBound(outputArray) + 1) End If Next inElement ReDim Preserve outputArray(UBound(outputArray) - 1) PROBABLY = outputArray(outputArray(0)) End Function 

我想要做的是循环通过inputArray()的元素,并为简单的值(数字,单词)我把这个值到一个outputArray ,值的范围(如A2的B5:B6)我循环这个范围,并坚持subcell的值到我的outputArray结束。 我认为问题在于redim清除了数组的内容,所以我只剩下最后一个结果了。

我也不喜欢If TypeName(inElement) = "Range" ; 它假定用户唯一可以input的是一个值(例如1,“cat”,TRUE)或范围(例如A1,A1:B3)。 如果用户input数组公式,那么inputArray其中一个元素是{1,1,0,0}。 这不是一个简单的单一的价值,也不是一个范围 – 所以也许这是不是在UDF帐户?如果我进入

 {=PROBABLY(G5,"a","b",IF(A2:A3<0,1,A2:A3))} 

我不能testing这个,因为我不知道如何调用我的UDF与数组公式input内部因此,我不能debugging它。

理想情况下,我想要的是在我的UDF的ParamArray参数中引用的所有元素被拆分并以爆炸的方式重新组合。 我想=SUM()这种方式工作,因为{=SUM(2,A2:A3,IF(ISTEXT(B1:B3),1,0))}是完全可以接受的,它包含值范围和arrays。 我想要那个function。


第2轮

好的,我使用ReDim Preserve更新了代码,并修复了一些拼写错误等。但怀疑公式无法处理数组作为input。 我检查了一个数组的TypeName ,它是variant ,所以不会被我的If [...] = "Range" Then line拾取。 但是,当通过标准的Else代码时,它也会引发错误。 那么我怎样才能添加这个数组呢?