多维数组的VBA递归置换

时间:2018-06-28 15:56:55

标签: arrays vba excel-vba recursion excel

我试图在VBA中创建一个递归函数以在电子表格中打印出值的排列。 我将所有需要置换的值保存到一个x维数组(数组数组)中:

paramValues = [
    ['AA', 'BA', 'IA', '8A'],
    ['A', 'B', 'C'],
    ['1', '2']
]

重要这不是已知的数组(任何大小),因此需要递归函数。

此外,我还有另一个数组,它告诉我每个子数组的维数(每个数组中有多少个值):paramControl = [4, 3, 2]

...

现在,我正在尝试创建如下所示的内容:

Screenshot of desired result

但是我被卡住了。我写了三种不同的代码,现在我试图忽略递归方面,并拼出每个For循环。

到目前为止,这是我的工作,但远不能正常工作-两个主要问题是: 1.遍历数组无法正常工作 2.工作表中的动作只是...错误!

For i = 1 To paramet

    For k = 1 To paramControl(i)

        ActiveCell.Value = paramValues(i, k)

            ' Print subsequent values
            For j = (i + 1) To paramet

                ActiveCell.Offset(0, 1).Range("A1").Select  ' Move right to fill second column

                For w = 1 To paramControl(j)

                    ActiveCell.Value = paramValues(j, w)

                    For y = (i + 2) To paramet

                        ActiveCell.Offset(0, 1).Range("A1").Select  ' Move right to fill second column

                        For p = 1 To paramControl(j)

                            ActiveCell.Value = paramValues(y, p)

                            ActiveCell.Offset(1, 0).Range("A1").Select ' Move down to fill second column


                        Next p

                    Next y

                    ActiveCell.Offset(0, -1).Range("A1").Select  ' Move left to fill second column

                Next w

                ActiveCell.Offset(0, -2).Range("A1").Select  ' Move left to fill second column


            Next j

        Cells(ActiveCell.Row, 1).Select

        ActiveCell.Offset(1, 0).Range("A1").Select ' Move down to fill second column

    Next k

    ActiveCell.Offset(1, 0).Range("A1").Select  ' Move down to fill second column

Next i

有人可以帮忙遮荫吗?我觉得我陷入高中问题! :)

我还发现了这篇文章有助于理解一些不同的方法,但是潜在的问题略有不同。 VBA recursive "For loops" Permutation?

谢谢

1 个答案:

答案 0 :(得分:0)

我不确定我是否会遵循所有步骤,但这会有所帮助吗?

Dim paramValues  As Variant, i As Long, j As Long

paramValues = Array(Array("AA", "BA", "IA", "8A"), _
                    Array("A", "B", "C"), _
                    Array(1, 2))

For i = LBound(paramValues, 1) To UBound(paramValues, 1)
    For j = LBound(paramValues(i), 1) To UBound(paramValues(i), 1)
        Debug.Print paramValues(i)(j)
    Next j
Next i

'results in Immediate window
AA
BA
IA
8A
A
B
C
 1 
 2 

您可能还对Expanding column cells for each column cell感兴趣。