使用FOR LOOP的EXCEL VBA将忽略步骤+1 LOOP COUNTER

时间:2013-08-29 00:49:40

标签: excel vba excel-vba

我正在寻找一种能够忽略或从循环计数器退一步的解决方案。这是我的代码,以便更好地理解。

 Sub DownArrow5_Click()
Dim c As Integer
Dim copyFromRow As Integer

copyFromRow = 1

For c = 1 To 20
   If ActiveSheet.Rows(copyFromRow).Hidden = False And Range("A" & c & "").Value <> "" Then
   'start copy paste
    ActiveSheet.Range("A" & copyFromRow & ", C" & copyFromRow & "").Copy
    Sheets("Sheet2").Select
    ActiveSheet.Range("A1").Select
    ActiveCell.Offset(1, 0).Select
    ActiveSheet.Paste
    ActiveCell.Offset(1, 0).Select
    Sheets("Sheet1").Select
    Application.CutCopyMode = False

    Else
        c = 'disregard the +1 for the loop

   End If
 Next c   
End Sub

我不能递减计数器,因为它会产生负( - )结果,从而返回一个无休止的循环。

注意:我需要将20张UNHIDDEN行复制并粘贴到sheet2。这就是我需要获得Max计数器(20)的原因。这只是我工作的简短代码。

2 个答案:

答案 0 :(得分:3)

实际上,在For...Next循环中操纵循环计数器可能不是一个好主意。您的代码段不清楚为什么您需要执行此操作,但如果您需要在c - 1块中的某处使用Else的值,请使用{ {1}}(未指定c - 1),或将c分配给另一个变量:

c - 1

<强>更新

现在你已经编辑了更多细节的代码,我想你正在寻找这样的东西:

Sub DownArrow5_Click()
    Dim c As Integer, d As Integer

    For c = 1 To 20
        If (condition) then
            'do stuff here

        Else
            d = c - 1
            'some more stuff here using d

        End If
    Next

End Sub

请注意,VB有几个可以正常工作的循环结构 - 任何在20次迭代时计算为While c <= 20 If Not ActiveSheet.Rows(copyFromRow).Hidden _ And Range("A" & c).Value <> vbNullString Then 'do your stuff c = c + 1 End If Wend 的条件都可以,所以只需使用你觉得更具可读性的任何东西:

False

答案 1 :(得分:3)

使用其他类型的循环:

c = 1
Do
    If (condition) Then
        'do stuff

         c = c+1  'increment your counter variable
    Else:
        'presumably do nothing, i.e., "Disregard" the loop.
        ' do NOT increment the counter variable in the Else block
    End If

Loop While Not c > 20