我试图在另一个用户定义的函数中使用从用户定义的函数创建的数组。在本练习中,我有两个独立的功能。
第一个函数将从范围输入创建一个数组并对值求和(是的,我知道那里有一个excel内置求和函数,但这只是用于练习)。
第二个函数将调用在第一个函数中创建的数组,并使用第二个范围输入对值求和。请参阅以下代码。
Function first_funct(list_1 As range) As Double
Dim extent As Integer
extent = list_1.rows.Count
Dim main_array() As Double
ReDim main_array(1 To extent)
Dim i As Integer
first_funct = 0
For i = 1 To extent
main_array(i) = list_1(i).Value
'main_array will be used again in second function
first_funct = first_funct + main_array(i)
Next i
End Function
Function second_funct(list_2 As range) As Double
Dim extent As Integer
extent = list_2.rows.Count
'Assume the extent of list_2 is equal to extent of list_1 in first function.
Dim i As Integer
second_funct = 0
For i = 1 To extent
second_funct = second_funct + main_array(i) + list_2(i).Value
'How do I call upon main_array created from list_1 in the first function?
Next i
End Function
我的问题是:如何使用第一个函数中创建的main_array
,以便我可以在第二个函数中使用它。
实际上,我需要计算数百个单元格并为每个单元格创建相同的数组效率低下。我想创建一个数组(在这种情况下是函数#1)并使用一个更简单的函数(函数#2)来调用保存的数组,为我节省了许多代码和时间。
提前致谢。
答案 0 :(得分:1)
将数组存储在全局变量中是可行的方法。但是这种方法的一个问题是你已经将依赖引入了Excel无法看到的second-func。修复此问题比仅使数组全局化更复杂。
因此,您必须以某种方式确保在第二个函数之前已在此Excel会话中计算first_func,并且还要确保在重新计算first-func时(例如因为list_1已更改)所有第二个Func都重新计算。
所以你必须做这样的事情: