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

问题描述 投票:1回答:1

目前我手动将值输入数组,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
excel vba permutation
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.