JD1*_*997 1 excel vba excel-vba
我在这里有一系列包含For循环的代码块,我想缩小这个代码,以便它可以以相同的方式工作,但只要这些代码块中的一个,而不是它的12个块.长度.正如您所看到的,每个块都是一组6,我在这里遇到的挑战是缩短代码,同时将变量保持在6个组中.在此程序中,值在两列中生成并按顺序执行.例如:
当m为1到6时,对于所有六个值,值p需要为1
当m为7到12时,对于所有六个值,值p需要为2
当m为13到18时,对于所有六个值,值p需要为3
等等....
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
Run Code Online (Sandbox Code Playgroud)
有没有办法增加这些值m和p,使它们达到78,同时为每个块保持这六个组?
可能有更聪明的方法来做到这一点,但我会使用模数函数.当你除以两个数时,模数返回余数,所以如果除以m6,如果m是6的倍数,则余数只有0.在这种情况下,你只需增加我添加的变量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
Run Code Online (Sandbox Code Playgroud)