VBA中的动态循环
作为VBA的新手,我非常感谢您对以下问题的帮助 我正在尝试创建一个包含0和1的表。 我有一组变量,让我们把它们叫做a,B,C,每个变量可以分别取a,B,C个不同的值(a,B,C是整数)。 我试图构建一个矩阵,将这3个变量组合的所有不同场景都包含在内。矩阵中的值应为0或1。 因此,如果a=2,b=3,c=4,这个表会是这样的 我已经写了代码(在末尾插入) 但是,该表必须是动态的,因为变量的数量(以及每个变量的场景数量)不是固定的。 有人能帮我吗 多谢各位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 =
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只是一个懒洋洋的周六,所以我有时间不受打扰地思考。