[英]Copy-paste loop with skipped values in VBA
對於一般的代碼編寫,尤其是VBA,我還是一個新手。
我試圖編寫一個相當簡單的宏,每天將值從一個單元格復制到另一個單元格,但是我想知道是否有一種方法可以減少循環計數器的變量,換句話說,循環計數器可以跳過某些值?
Private Sub YesButton_Click()
Dim z As Integer
Dim z1 As Integer
Dim z2 As Integer
Dim z3 As Integer
Dim z4 As Integer
Dim z5 As Integer
Dim z6 As Integer
Dim z7 As Integer
Dim z8 As Integer
Dim z9 As Integer
Dim z10 As Integer
Dim z11 As Integer
Dim z12 As Integer
Dim z13 As Integer
Application.Calculation = xlCalculationManual 'turn off autocalc to speed up copy paste process
For z = 5 To 16
Sheet68.Range("H" & z) = Sheet68.Range("D" & z).Value
Next z
For z1 = 21 To 33
Sheet68.Range("H" & z1) = Sheet68.Range("D" & z1).Value
Next z1
For z2 = 38 To 51
Sheet68.Range("H" & z2) = Sheet68.Range("D" & z2).Value
Next z2
For z3 = 73 To 86
Sheet68.Range("H" & z3) = Sheet68.Range("D" & z3).Value
Next z3
For z4 = 92 To 94
Sheet68.Range("G" & z4) = Sheet68.Range("D" & z4).Value
Next z4
For z5 = 100 To 110
Sheet68.Range("G" & z5) = Sheet68.Range("D" & z5).Value
Next z5
For z6 = 115 To 126
Sheet68.Range("G" & z6) = Sheet68.Range("D" & z6).Value
Next z6
For z7 = 131 To 142
Sheet68.Range("G" & z7) = Sheet68.Range("D" & z7).Value
Next z7
For z8 = 149 To 151
Sheet68.Range("G" & z8) = Sheet68.Range("D" & z8).Value
Next z8
For z11 = 157 To 164
Sheet68.Range("G" & z11) = Sheet68.Range("D" & z11).Value
Next z11
For z9 = 169 To 175
Sheet68.Range("G" & z9) = Sheet68.Range("D" & z9).Value
Next z9
For z10 = 180 To 186
Sheet68.Range("G" & z10) = Sheet68.Range("D" & z10).Value
Next z10
For z12 = 191 To 203
Sheet68.Range("H" & z12) = Sheet68.Range("D" & z12).Value
Next z12
Application.Calculation = xlCalculationAutomatic 'turn autocalc back on
Unload Me
End Sub
提前致謝
這是一個如何重新思考代碼的示例。 您顯然需要將樣本重新適應您自己的數據。
它的大小(取決於您的間隔)(在您的情況下,我算為14,但我可能錯了)。
Dim ranges(1 To 5)
Dim j As Integer '<-- counter of the ranges
Dim k As Long '<-- counter of your loop
在這里,您可以將特定范圍定義為字符串。 在我的示例中,我放置了隨機數,但在您的情況下應為“ 5-16”,“ 21-23”等。
ranges(1) = "1-2"
ranges(2) = "5-10"
ranges(3) = "15-20"
ranges(4) = "25-30"
ranges(5) = "35-40"
外面的一個將遍歷范圍,內部的一個將拆分范圍並使用上下限遍歷您的單元格
For j = 1 To 5
For k = Split(ranges(j), "-")(0) To Split(ranges(j), "-")(1)
'your code here
'test it with a msgbox:
MsgBox "k is now equal to " & k
Next k
Next j
您的代碼應如下所示:
Dim ranges(1 To 14) '<-- not sure, please check it first!
Dim j As Integer, k As Long
ranges(1) = "5-16"
ranges(2) = "21-33"
'....
ranges(14) = "191-203"
For j = 1 To 14
For k = Split(ranges(j),"-")(0) To Split(ranges(j),"-")(1)
Sheet68.Range("G" & k) = Sheet68.Range("D" & k).Value
Next k
Next j
您可以只聲明1個int並將其用於每個循環。 您還是要在循環開始時給它一個新值!
所以:
Dim z As Integer
For z = 0 To 10 Step 1
//Do something
Next
For z = 11 To 21 Step 1
//Do something
Next
Sub YesButton_Click()
Dim rngTemp As Range
For Each rngTemp In Range("H5:H16, H21:H33, H38:H51, H73:H86, H191:H203")
rngTemp.Value = rngTemp.Offset(, -4).Value
Next rngTemp
For Each rngTemp In Range("G92:G94, G100:G110, G115:G126, G131:G142, G149:G151, G157:G164, G169:G175, G180:G186")
rngTemp.Value = rngTemp.Offset(, -3).Value
Next rngTemp
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.