2016-04-21 7 views
1

Ich habe den folgenden Code, die ich brauche 1000 mal zu wiederholen:Wiederholen Sie den Code in VBA

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 

Ich bin neu, damit ich weiß nicht, ob es die eleganteste Lösung für mein Problem ist, aber es funktioniert die Arbeit. Das Problem ist, dass ich den gleichen Code für 1000 Zeilen benötige und es scheint eine mächtige Aufgabe zu sein, die Zellennummer manuell so oft zu ändern.

Können Sie mir helfen, mein Problem zu lösen?

Ich schätze alle Hilfe, danke im Voraus.

Antwort

3

können Sie es mit einer "for-Schleife" erreichen. Dies sollte auf dem richtigen Weg sein:

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 
es

ausprobieren und sehen, wo Sie bekommen, lassen Sie uns wissen, wie es :)

+1

in seinem ursprünglichen Bereich der Suche ich laufen würde 'i = 2 bis 1001' –

+1

Ich glaube, Sie richtig sind: D Danke für die Stelle Tim !! – IIJHFII

+0

Ich habe es versucht, und ich bekomme eine ** Kompilierfehler Variable nicht definiert ** für ** i **. Auch ich brauche alle Zellennummern zu wiederholen – Niko

-3

nicht verwenden „A1“ Stil Zelladressen aber Cell(Row, Col) stattdessen geht. ..

+1

verwendet haben Wie beantwortet das die Frage? Verwenden Sie stattdessen Kommentare. – Tom

+0

@Tom Es beantwortet die Frage sehr ähnlich wie die andere Antwort oben, glaube ich. Außer ich habe den kompletten Code nicht gegeben. Der OP fragte, wie er die Zeilennummer seiner Zellenreferenzen in seinem Code ändern könnte, und meine Antwort bietet einen Weg. – Rob

+0

Nein, tut es nicht. Was Sie vorgeschlagen haben, ist die "A1" -Referenzierung des OPs für "R1C1" -Referenzierung zu ersetzen. Ohne einen Hinweis auf eine Schleife wie die andere Antwort - das OP hat immer noch genau das gleiche Problem. – Tom

0

Dies ist für Ihr Lernen, dass Sie vermeiden sollten. Wählen Sie in Ihrem Code.

Pls haben einen Blick here

pls die unter vereinfachten Code.

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 
+0

Danke !! Das klappt auch! – Niko

+0

@Niko, bitte als Lösung markieren, wenn das gewünschte Ergebnis erreicht wird –

3

Dies wird mit einer Reihe viel schneller sein:

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 
+0

Es ist immer traurig, wenn die beste Antwort nicht gewählt wird, weil sie zu raffiniert ist:/Arrays sind auch sexy^_^ – findwindow

+1

Schön die Anerkennung zu sehen - thx :) – brettdj

Verwandte Themen