Excel VBA从函数调用Sub,递归函数,数组函数重新计算

时间:2017-12-20 11:44:28

标签: arrays excel vba recursion

我被困住了,请帮忙。我有一个小的动态长度数组(6:20 x 2文本/数字),我想自动创建一个排序副本,以便我可以绘制一个单调的散点图。要自动重新计算,我正在考虑功能。我抄袭了QuickSortArray,它可以作为Sub进行排序。

Q1:我无法从函数调用QuickSortArray,即使我可以从另一个Sub成功调用它。工作Sub调用如下。我将Sub QuickSortArray更改为从电子表格调用的函数QuickSortArray,但无法使其工作。因为它可以从Sub工作,我可以在数据发生变化时欺骗CallSub吗?这使接下来的两个问题没有实际意义。

Sub CallSub()
   temparray = Range("weekdays")
   Call QuickSortArray(temparray, , , 2)
   Dim MyRange As String
   MyRange = "daysout"
   Range(MyRange) = temparray
End Sub

Q2:我注意到QuickSortArray是递归的(自己调用):这可以在一个函数中工作吗?我使用的VBA是这里的顶级代码: Sorting a multidimensionnal array in VBA。在底部它有这些递归调用

If (lngMin < j) Then Call QuickSortArray(SortArray, lngMin, j, lngColumn)
If (i < lngMax) Then Call QuickSortArray(SortArray, i, lngMax, lngColumn)

问题3:下面的代码是我发现传递数组并检索它的唯一工作方式。工作日是电子表格中的命名范围。但是,当使用Array算法检索整个数组时,Fn SortDays不会自动重新计算单个单元格函数或(我想要)?它下面的函数Test会自动重新计算并将结果返回到电子表格中的{= test($ L $ 20)}数组中($ L $ 20 = x)。所以这不是重新计算设置。

Function SortDays() As Variant  
Dim InputArray As Variant 
InputArray = Range("weekdays")  
SortDays = InputArray  
End Function  

Function Test(x As Integer) As Variant
    Dim V() As Variant
    Dim N As Long
    Dim R As Long
    Dim C As Long
    ReDim V(1 To 3, 1 To 4)
    For R = 1 To 3
        For C = 1 To 4
            N = N * x + 1
            V(R, C) = N
        Next C
    Next R
    Test = V
End Function

0 个答案:

没有答案