在VBA中重复代码

时间:2016-04-21 08:35:04

标签: excel vba excel-vba

我有以下代码需要重复1000次:

Option Explicit

Sub Turn()


Range("f2").Select
If Range("e2").Value = "00/00/00" Then
    ActiveCell.Value = 0

ElseIf Range("e2").Value Then
    ActiveCell.Value = Range("e2")

End If

Range("f2").Select
    If ActiveCell.Value > 0 Then
        Range("G2") = Range("f2") - Range("b2")

End If
End Sub

我是新手,所以我不知道它是否是我问题最优雅的解决方案,但它确实能够胜任。问题是我需要1000行的相同代码,并且多次手动更改单元格数似乎是一项艰巨的任务。

你能帮我解决问题吗?

我感谢所有的帮助,提前谢谢。

4 个答案:

答案 0 :(得分:3)

你可以使用' for循环来实现它。这应该是正确的:

Option Explicit

Sub Turn()

Dim i As Long

For i = 2 to 1001
    Range("f" & i).Select
    If Range("e" & i).Value = "00/00/00" Then
        ActiveCell.Value = 0

    ElseIf Range("e" & i).Value Then
        ActiveCell.Value = Range("e" & i)
    End If

    Range("f" & i).Select
        If ActiveCell.Value > 0 Then
            Range("G" & i) = Range("f" & i) - Range("b" & i)
        End If
Next i

End Sub

尝试一下,看看你得到了什么,让我们知道它是怎么回事:)

答案 1 :(得分:3)

使用数组会更快:

Sub Recut()
Dim X, Y
Dim lngCnt As Long

X = [F2:G1001].Value2
Y = [B2:B1001].Value2


For lngCnt = 1 To UBound(X)
 If X(lngCnt, 1) = "00/00/00" Then
    X(lngCnt, 1) = 0
 Else
    If X(lngCnt, 1) > 0 Then X(lngCnt, 2) = X(lngCnt, 1) - Y(lngCnt, 1)
 End If
Next

[F2:G1001].Value2 = X

End Sub

答案 2 :(得分:0)

这是您应该避免的学习。请在您的代码中选择。

请看here

请参阅以下简化代码。

Sub Turn()
    Dim i As Long
    For i = 2 To 1001
        If Range("F" & i).Value = "00/00/00" Then
            Range("F" & i).Value = 0
        ElseIf Range("F" & i).Value > 0 Then
            Ramge("G" & i).Value = Range("F" & i).Value - Range("B" & i).Value
        End If
    Next i
End Sub

答案 3 :(得分:-3)

不要使用" A1"样式单元格地址,但Cell(Row, Col)而不是......