문제

이 질문은 전에 질문이 왔지만 Excel에 쉽게 적용 할 수있는 대답을 찾을 수 없습니다.VBA.

기본적으로 나는이 포스터가 물어 본 것과 정확히 무엇을하고 싶지만 VBA에서는 원합니다.배열을 만들고 싶습니다. n x 2 ^ n은 각 행이 0 또는 1 일 수있는 n 변수의 다른 순열을 나타내는 배열을 만들고 싶습니다.

나는이 문제를해서 나이를 가지고 놀았으며, 루프의로드로 설정된 n을 위해 할만므로, 변수 n은 내가 작동하는 것을 찾을 수 없습니다.

모든 코드 또는 이에 대한가는 방법에 대한 제안은 많이 인정됩니다!

도움이 되었습니까?

해결책

a

열의 값을 나열합니다.
Sub EasyAsCounting()
    Dim N As Long, M As Long, K As Long
    N = Application.InputBox(Prompt:="Enter N", Type:=1)
    M = 2 ^ N - 1
    For K = 0 To M
        Cells(K + 1, 1) = "'" & Application.WorksheetFunction.Dec2Bin(K, N)
    Next K
End Sub
.

편집 # 1

이것은 vba 에만 배열을 저장합니다.

Sub EasyAsCounting()
    Dim N As Long, M As Long, K As Long, ary, s As String
    Dim J As Long
    N = Application.InputBox(Prompt:="Enter N", Type:=1)
    M = 2 ^ N - 1
    ReDim ary(1 To M + 1, 1 To N)
    For K = 0 To M
        s = Application.WorksheetFunction.Dec2Bin(K, N)
        For J = 1 To N
            ary(K + 1, J) = Mid(s, J, 1)
        Next J
    Next K
    '
    'display the array
    '
    msg = ""
    For K = 1 To M + 1
        For J = 1 To N
            msg = msg & " " & ary(K, J)
        Next J
        msg = msg & vbCrLf
    Next K
    MsgBox msg
End Sub
.

다른 팁

Excel에 있지 않고 기능에 액세스 할 수없는 경우 여기에 있습니다.또는 511보다 큰 숫자가있는 경우

Sub MakePerms()

    Dim i As Long, j As Long
    Dim n As Long
    Dim aPerms() As Byte
    Dim lCnt As Long
    Dim sOutput As String

    Const lVar As Long = 4

    ReDim aPerms(1 To 2 ^ lVar, 1 To lVar)

    For i = 0 To UBound(aPerms, 1) - 1
        n = i
        lCnt = lVar
        aPerms(i + 1, lCnt) = CByte(n Mod 2)
        n = n \ 2
        Do While n > 0
            lCnt = lCnt - 1
            aPerms(i + 1, lCnt) = CByte(n Mod 2)
            n = n \ 2
        Loop
    Next i

    For i = LBound(aPerms, 1) To UBound(aPerms, 1)
        sOutput = vbNullString
        For j = LBound(aPerms, 2) To UBound(aPerms, 2)
            sOutput = sOutput & Space(1) & aPerms(i, j)
        Next j
        Debug.Print sOutput
    Next i

End Sub
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top