Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA中的动态循环_Vba_For Loop_Dynamic - Fatal编程技术网

VBA中的动态循环

VBA中的动态循环,vba,for-loop,dynamic,Vba,For Loop,Dynamic,作为VBA的新手,我非常感谢您对以下问题的帮助 我正在尝试创建一个包含0和1的表。 我有一组变量,让我们把它们叫做a,B,C,每个变量可以分别取a,B,C个不同的值(a,B,C是整数)。 我试图构建一个矩阵,将这3个变量组合的所有不同场景都包含在内。矩阵中的值应为0或1。 因此,如果a=2,b=3,c=4,这个表会是这样的 我已经写了代码(在末尾插入) 但是,该表必须是动态的,因为变量的数量(以及每个变量的场景数量)不是固定的。 有人能帮我吗 多谢各位 Sub table() For i =

作为VBA的新手,我非常感谢您对以下问题的帮助

我正在尝试创建一个包含0和1的表。 我有一组变量,让我们把它们叫做a,B,C,每个变量可以分别取a,B,C个不同的值(a,B,C是整数)。 我试图构建一个矩阵,将这3个变量组合的所有不同场景都包含在内。矩阵中的值应为0或1。 因此,如果a=2,b=3,c=4,这个表会是这样的

我已经写了代码(在末尾插入)

但是,该表必须是动态的,因为变量的数量(以及每个变量的场景数量)不是固定的。 有人能帮我吗

多谢各位

Sub table()
For i = 1 To 2
    For j = 1 To 3
        For k = 1 To 4
            For m = 1 To 9
                If m = i Then
                    Worksheets("sheet1").Range("a1").Cells(12 * (i - 1) + 4 * (j - 1) + k, m).Value = 1
                ElseIf m = j + 2 Then
                    Worksheets("sheet1").Range("a1").Cells(12 * (i - 1) + 4 * (j - 1) + k, m).Value = 1
                ElseIf m = k + 5 Then
                    Worksheets("sheet1").Range("a1").Cells(12 * (i - 1) + 4 * (j - 1) + k, m).Value = 1
                Else
                    Worksheets("sheet1").Range("a1").Cells(12 * (i - 1) + 4 * (j - 1) + k, m).Value = 0
                End If
            Next m
        Next k
    Next j
Next i
End Sub
试试这个:

Sub matrix()
Dim arr() As Variant
Dim totrow As Long
Dim j As Long
Dim t As Long
Dim p As Long
Dim x As Long
Dim ws As Worksheet
Set ws = Sheets("Sheet1")
'Set your array of numbers
arr = Array(2, 3, 4)
'If you want to refer to ranges on Sheet1 use:
'arr = Array(ws.Range("T1"), ws.Range("U1"), ws.Range("V1"))

totrow = 1
For j = LBound(arr) To UBound(arr)
    totrow = totrow * arr(j)
    x = x + arr(j)
Next j
ws.Range(ws.Cells(1, 1), ws.Cells(totrow, x)).Value = 0
p = 1

For j = UBound(arr) To LBound(arr) Step -1
    For t = 1 To totrow Step 1
        For i = 1 To arr(j)
            ws.Range(ws.Cells(t, x - arr(j) + i), ws.Cells(t + p - 1, x - arr(j) + i)).Value = 1
            t = t + p
        Next i
        t = t - 1
    Next t
    p = p * arr(j)
    x = x - arr(j)
Next j
End Sub

这将适用于数组中的任意值或数组中任意数量的整数。主要限制是工作表上的行数和列数。

为什么不让子表接受一个参数:
子表(x为整数)
然后在循环中:
对于i=1到x
?非常感谢!这很好用。我真的很感谢你的帮助:)你的水晶球今天似乎调整得很好。@jeep只是一个懒洋洋的周六,所以我有时间不受打扰地思考。