【发布时间】:2017-05-17 02:56:18
【问题描述】:
我正在尝试在另一个用户定义函数中使用从用户定义函数创建的数组。对于这个练习,我有两个独立的函数。
第一个函数将从范围输入创建一个数组并对值求和(是的,我知道有一个 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)来调用保存的数组,从而为我节省了许多代码行和时间。
提前致谢。
【问题讨论】:
-
全局变量是在许多函数和子程序中使用的变量。你可能想让你的数组全局化。
-
要添加到@A.S.H,只需将
Dim main_array() As Double行移到这两个函数的顶部。应该工作。 -
您将数组作为参数传递,或者如果只有一个和程序的要点,则将其声明为全局。适度使用的全局变量通过使事情变得简单来加速程序。
标签: arrays excel vba function range