这似乎是一个简单的问题,但我却无法解决。
在我的UDF中,结果是一个动态数组,它溢出在一个单元格范围内。Excel不是365,所以我选择了一个未定义的单元格数量,然后检查结果中的值不是#N/A,并在其上“调整”结果。
问题是,如果返回的数组的长度只有一个,那么所选单元格中的所有其他单元格都会得到与返回值相同的结果(第一个单元格)。除了第一个单元格之外,所有其他单元格都需要#N/A。在“超过范围单元格”中肯定需要错误值
Function testoneresult(length As Integer)
ReDim a(length - 1)
For i = 0 To length - 1
a(i) = Rnd()
Next i
testoneresult = a
End Function
字符串
结果
x1c 0d1x的数据
我试过一些小把戏,但都不管用
尺寸a(长度-1,0)或
B=a(0)testoneresult=B或
dim a(长度)(在这种情况下,第二个值为0)或
a(长度)=1/0(所有单元格#VALUE(预期))
这是否是一个版本相关的结果,是否有解决方案?
1条答案
按热度按时间ax6ht2ek1#
你可以使用
Application.Caller
来确定你的函数被应用到什么范围。Application.Caller
不一定每次都是一个范围,所以它需要被测试,但除此之外,它很容易管理你的案例:字符串
注意:如果你输入公式
=testoneresult(ROW())
,你会发现它不起作用。原因是
ROW()
在数组公式中使用时返回一个1列数组。要有一个合适的整数,您需要键入例如=testoneresult(MIN(ROW())
。或者,您可以将参数更改为
length as Variant
,检测它是整数还是数组,如果是后者,则返回length
中每个项目1行的二维数组。