如何调用由不同函数创建的数组?

时间:2017-01-03 04:17:34

标签: arrays excel vba function range

我试图在另一个用户定义的函数中使用从用户定义的函数创建的数组。在本练习中,我有两个独立的功能。

第一个函数将从范围输入创建一个数组并对值求和(是的,我知道那里有一个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)来调用保存的数组,为我节省了许多代码和时间。

提前致谢。

1 个答案:

答案 0 :(得分:1)

将数组存储在全局变量中是可行的方法。但是这种方法的一个问题是你已经将依赖引入了Excel无法看到的second-func。修复此问题比仅使数组全局化更复杂。

因此,您必须以某种方式确保在第二个函数之前已在此Excel会话中计算first_func,并且还要确保在重新计算first-func时(例如因为list_1已更改)所有第二个Func都重新计算。

所以你必须做这样的事情:

  • 在Workbook_Open事件中,您需要重新计算first-func(to 当您重新打开工作簿并且全局数组为空并且需要重新创建时处理该情况)
  • Second_func需要有一个引用的附加参数 包含first-Func的单元格(以便Excel重新计算 每当list_1发生变化,当func-1重新计算时)