我试图在VBA中创建一个递归函数以在电子表格中打印出值的排列。 我将所有需要置换的值保存到一个x维数组(数组数组)中:
paramValues = [
['AA', 'BA', 'IA', '8A'],
['A', 'B', 'C'],
['1', '2']
]
重要:这不是已知的数组(任何大小),因此需要递归函数。
此外,我还有另一个数组,它告诉我每个子数组的维数(每个数组中有多少个值):paramControl = [4, 3, 2]
...
现在,我正在尝试创建如下所示的内容:
但是我被卡住了。我写了三种不同的代码,现在我试图忽略递归方面,并拼出每个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?
谢谢
答案 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