使用VBA将函数结果数组输出到工作表

场景:我有一个函数可以对组件的权重进行上限处理。

问题:当我尝试将结果输出数组输出到Excel工作表时,我不断收到值错误(在Excel函数应用的单元格中)

我已经试过了:我尝试在这个Excel VBA函数的答案打印到工作簿的数组

但我仍然得到同样的错误

问题:我该如何正确做这个程序? 事实上,我正在使用一个function有问题的这个操作?

代码的相关部分:(暗淡部分和其他基本操作被删除,以保持简洁的问题)

Function Capping(ISIN As Range, Sector As Range, Weights As Range, W1 As Double, W2 As Double) As Variant le = UBound(ArISIN) ReDim Preserve ArCap(le, 8, 1) For c = 1 To le ArCap(c, 1, 1) = ArISIN(c, 1) ArCap(c, 2, 1) = ArSector(c, 1) ArCap(c, 3, 1) = ArWeight(c, 1) Next c For c = 1 To le s = 0 For i = 1 To le If ArCap(c, 2, 1) = ArCap(i, 2, 1) Then s = s + ArCap(i, 3, 1) End If Next i ArCap(c, 4, 1) = s Next c For c = 1 To le If ArCap(c, 4, 1) >= W2 Then ArCap(c, 5, 1) = 0.03 ArCap(c, 6, 1) = 0.03 / ArCap(c, 3, 1) * ArCap(c, 4, 1) Else ArCap(c, 5, 1) = "Not Capped" End If Next c suc = 0 scap = 0 For c = 1 To le If ArCap(c, 5, 1) <> "Not Capped" Then scap = scap + ArCap(c, 6, 1) Else suc = suc + ArCap(c, 3, 1) End If Next c For c = 1 To le If ArCap(c, 5, 1) = 0.03 Then ArCap(c, 7, 1) = ArCap(c, 6, 1) Else ArCap(c, 7, 1) = ArCap(c, 3, 1) / suc * (1 - s) End If Next c For c = 1 To le s = 0 For i = 1 To le If ArCap(c, 2, 1) = ArCap(i, 2, 1) Then s = s + ArCap(i, 7, 1) End If Next i ArCap(c, 8, 1) = s Next c ReDim Preserve OutArray(le, 0) For c = 1 To le OutArray(c, 0) = ArCap(c, 7, 1) Next c 'this is where I am having problems: ActiveSheet.Range("A4:UC4").Value = WorksheetFunction.Transpose(OutArray) 

您应该通过函数返回值,而不是直接写入到表单中。 最后一行看起来像这样:

 Capping = WorksheetFunction.Transpose(OutArray) 

而且你会把这个函数作为你想要的单元格中的一个公式。 否则,你应该把它写成一个子程序而不是一个函数。

您正在将结果写入单个行,所以一维数组就足以保存数据:

 ReDim OutArray(1 To le) For c = 1 To le OutArray(c) = ArCap(c, 7, 1) Next ActiveSheet.Range("A4").Resize(1, le) = OutArray