VBA-将所有数字排列写入数组

时间:2019-02-13 11:24:24

标签: excel vba permutation

当前,我正在手动将值输入到sign_array(a,b,c)数组中。其中c是级别编号。因此,请参见下面的输出,其中c = 1,只有两个输入到数组。当c = 2(或2级)时,有4个输入。级别3 = 8个输入,级别4有16个输入。但是,全部写出来变得很累。

我真的为此感到挣扎。我需要将1或2的所有组合写入数组,并寻找以下输出:

1    
2
1, 1    
1, 2    
2, 1
2, 2  
1, 1, 1  
2, 1, 1    
1, 2, 1    
1, 1, 2    
2, 2, 1    
2, 1, 2    
1, 2, 2    
2, 2, 2    
1, 1, 1, 1    
2, 1, 1, 1
etc

请在下面看到我能走多远,但不知道该怎么做才能区分1或2。任何帮助将不胜感激。目前,我自己手动输入组合,但是随着尺寸的增加,它变得越来越重要。

我不介意每个关卡创建都有一个for循环。

levels_to_use = 4
for i = 1 to levels_to_use  ^ 2
    for j = 1 to levels_to_use 
        ' in here how to chose between 1 or 2
        sign_array(i, j, levels_to_use) = 1
    next
next

1 个答案:

答案 0 :(得分:1)

前段时间,我没有比这更好的事情了,我确切地编写了您要查找的代码-https://www.vitoshacademy.com/vba-nested-loops-with-recursion/

因此,如果您对其进行一些更改,避免使用_并将size变量放入循环中,它将显示所需的结果:

enter image description here

如果将c = Array(1, 2)更改为c = Array(1, 2, 3),则会向系统添加第三个元素。

Sub Main()

    Static size         As Long
    Static c            As Variant
    Static arr          As Variant
    Static n            As Long

    c = Array(1, 2)
    n = UBound(c) + 1
    For size = 1 To 4
        ReDim arr(size - 1)
        EmbeddedLoops 0, size, c, n, arr
        Debug.Print "---------"
    Next size

End Sub

Function EmbeddedLoops(index, k, c, n, arr)

    Dim i                   As Variant
    If index >= k Then
        PrintArrayInOneLine arr
    Else
        For Each i In c
            arr(index) = i
            EmbeddedLoops index + 1, k, c, n, arr
        Next i
    End If

End Function

Public Sub PrintArrayInOneLine(myArray As Variant)

    Dim counter     As Long
    Dim sArray      As String
    For counter = LBound(myArray) To UBound(myArray)
        sArray = sArray & myArray(counter)
    Next counter
    Debug.Print sArray

End Sub