我在这里有一系列包含 For 循环的代码块,我想缩小此代码的大小,以便它可以以相同的方式工作,但大约与这些代码块中的一个代码块一样长,而不是让它成为 12 个 block 长度。正如您所看到的,每个 block 都是一组 6,我在这里遇到的挑战是缩短代码,同时将我的变量保持在 6 组中。在这个程序中,值在两列中生成并按顺序排列。
例如:
当 m 为 1 到 6 时,值 p 对于所有六个值都需要为 1
当 m 为 7 到 12 时,所有六个值的值 p 都需要为 2
当 m 为 13 到 18 时,所有六个值的值 p 都需要为 3
ETC....
For m = 1 To 6 'Riser
For p = 1 To 1 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 7 To 12 'Riser
For p = 2 To 2 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 13 To 18 'Riser
For p = 3 To 3 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 19 To 24 'Riser
For p = 4 To 4 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 25 To 30 'Riser
For p = 5 To 5 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 31 To 36 'Riser
For p = 6 To 6 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 37 To 42 'Riser
For p = 7 To 7 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 43 To 48 'Riser
For p = 8 To 8 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 49 To 54 'Riser
For p = 9 To 9 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 55 To 60 'Riser
For p = 10 To 10 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 61 To 66 'Riser
For p = 11 To 11 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
For m = 67 To 72 'Riser
For p = 12 To 12 'Car
If Not IsEmpty(ws.Range("Riser" & m)) And Not IsEmpty(ws.Range("Car_" & p)) Then
ws.Range("C1").Offset(m).Value = p
Exit For
End If
Next p
Next m
有没有办法增加这些值 m 和 p 以使它们增加到 78,同时为每个 block 保持这些六组?
最佳答案
可能有更聪明的方法可以做到这一点,但我会使用模函数。当您将两个数字相除时,模会返回余数,因此如果您将 m
相除乘以 6,如果 m
,则余数仅为 0是 6 的倍数。在这种情况下,您只需增加我添加的变量 everySix
Dim everySix As Long
everySix = 1
Dim wasFound As Boolean
For m = 1 To 78
If Not IsEmpty(ws.Range("Car_" & everySix)) Then
If Not IsEmpty(ws.Range("Riser" & m)) And Not wasFound Then
ws.Range("C1").Offset(m).Value2 = everySix
wasFound = True
End If
If m Mod 6 = 0 Then
everySix = everySix + 1
wasFound = False
End If
End If
Next m
关于vba - 如何将一系列 For 循环 block 缩短为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51822653/