簡體   English   中英

VBA中跳過值的復制粘貼循環

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM