2017-01-24 3 views
5

Neu bei VBA, wenn mir jemand helfen könnte, was ich hier falsch mache. Der Versuch, eine Schleife so auszuführen, dass sie nach einem bestimmten Text sucht, startet die Schleife und stoppt dann an einem bestimmten Punkt. Die Schleifen sind so, dass ich es einige Werte unter in meinem Blatt kopieren will daher eine ist 55. Im den Fehlerblock gegenüber IF ohne End IfWenn und Do Bis Schleife EXCEL VBA

Hier ist der Code:

Private Sub CommandButton3_Click() 
For y = 1 To 15 Step 5 
Dim x As Double 
Dim a As Double 
x = 1 
a = 55 
If Cells(x, y).Value = "Text1" Then 
Do Until Cells(x, y).Value = "Text2" 
Cells(a, y) = Cells(x, y).Value 
Cells(a, y + 1) = Cells(x, y + 1) 
x = x + 1 
a = a + 1 


Loop 


End Sub 
+1

Wenn Sie Ihren Code einrücken werden Sie 2 Fehler finden: 1. 'Wenn Zellen (x, y) .Value = "Text1" Then' ohne' End If ', 2.' Für y = 1 bis 15 Schritt 5' ohne 'Next y' –

+0

Wenn ich if und dann dachte ich, ich brauchte nicht End if? –

+2

AFAIK die * einzige * Zeit, die Sie nicht brauchen 'End If' ist, wenn Ihre' If' Anweisung in einer Zeile ist ... und selbst dann ist es am besten, eine strukturierte 'If' Anweisung zu verwenden. Zum Beispiel braucht dies nicht "End If": 'Wenn myVal = 1, dann Cells (1,1) .Value =" Okay "' alles in einer Zeile. – BruceWayne

Antwort

2

Neben den Fragen, die ich erwähnte in die Kommentare zu Ihrem Beitrag, wenn ich Sie richtig verstanden habe, wollen Sie auf Zellen in der Spalte A Schleife, finden Sie die erste "Text1", dann kopieren Sie alle Zellen in Zeile 55 und darunter, bis Sie "Text2" finden. Wenn das der Fall ist, versuchen Sie den Code unten:

Private Sub CommandButton3_Click() 

Dim x As Long, y As Long 
Dim a As Long 
Dim LastRow As Long 

With Worksheets("Sheet1") '<-- modify "Sheet1" to your sheet's name 
    For y = 1 To 15 Step 5 

     x = 1 '<-- reset x and a (rows) inside the columns loop 
     a = 55 '<-- start pasting from row 55 

     LastRow = .Cells(.Rows.Count, y).End(xlUp).Row 
     While x <= LastRow '<-- loop until last row with data in Column y 
      If .Cells(x, y).Value Like "Text1" Then 
       Do Until .Cells(x, y).Value = "Text2" 
        .Cells(a, y).Value = .Cells(x, y).Value 
        .Cells(a, y + 1).Value = .Cells(x, y + 1).Value 
        x = x + 1 
        a = a + 1 
       Loop 
      End If 
      x = x + 1 
     Wend 
    Next y 
End With 

End Sub 
+0

Ja Danke das hat funktioniert! Wie könnte ich es bearbeiten, um jede fünfte Spalte zu überprüfen? Ich habe die folgende for-Schleife hinzugefügt, aber es hat nicht funktioniert. Für y = 1 bis 15 Schritt 5 –

+0

@IsraShaikh Sie möchten die genaue Kopie Paste für jede fünfte Spalte tun? Bis Spalte 15? –

+0

ja @Shairado Also zuerst läuft es auf Spalte 1, dann Spalte 6 usw. bis Spalte 15 –

4

Einrücken ist der Weg nach vorne, haben Sie eine for Anweisung ohne next und ein if ohne End If:

Private Sub CommandButton3_Click() 
    For y = 1 To 15 Step 5 
     Dim x As Double 
     Dim a As Double 
     x = 1 
     a = 55 
     If Cells(x, y).Value = "Text1" Then 
      Do Until Cells(x, y).Value = "Text2" 
       Cells(a, y) = Cells(x, y).Value 
       Cells(a, y + 1) = Cells(x, y + 1) 
       x = x + 1 
       a = a + 1 
      Loop 
     End If 
    Next y 
end sub 
+0

Danke tom! Aus irgendeinem Grund bekomme ich keine Ausgabe. Was ich will, ist für meinen Code aus der ersten Spalte zu starten, gehen Sie durch und finden Sie Text1, wenn es die Werte weiter in Zellen (a, 1) kopiert, bis es eine Zelle erreicht, die Text2 hat, nach dem es stoppt. Fehle ich etwas? –

+0

Sollte auch die Deklarationen vor der For-Schleife verschieben. – Rdster

+0

Außerdem sollten x und a Long oder Integer sein, nicht Double –