Ich versuche einen Batch auszuführen. Ich muss bestimmte Spalten aus einem Blatt kopieren und in ein neu erstelltes Blatt einfügen. Dazu gehören Name, E-Mail usw. Ich habe eine verschachtelte Schleife gemacht, um das zu tun, aber ich kann nicht verhindern, dass sich die Ausgabezeile erhöht, nachdem sich die Daten von selbst zu wiederholen beginnen Code lautet wie folgt:
"Daten sammeln
For r = 1 To ActiveCell.End(xlDown).Row
Cells(1, c).Select
Do Until IsEmpty(Selection)
name = ActiveCell.End(xlToLeft).Value
email = ActiveCell.End(xlToLeft).Offset(0, 1).Value
phoneNumber = ActiveCell.End(xlToLeft).Offset(0, 2).Value
generation = ActiveCell.End(xlToLeft).Offset(0, 3).Value
status = ActiveCell.End(xlToLeft).Offset(0, 13).Value
"paste data
Sheets("Compiled Data").Select
Cells(oRow, c) = name
Cells(oRow, c + 1) = email
Cells(oRow, c + 2) = phoneNumber
Cells(oRow, c + 3) = generation
Cells(oRow, c + 4) = status
oRow = oRow + 1
Loop
Wie Sie sehen, laufen bereits zwei Schleifen. Ich frage mich, ob ich einen dritten brauche, um die Ausgabe (oRow) zu stoppen, und ob es überhaupt möglich ist, eine Schleife innerhalb einer Schleife innerhalb einer Schleife zu haben.
Vielen Dank.
Antworten:
0 für die Antwort № 1Cells(1, c).Select
Dies wählt immer Zeile 1. Ich glaube nicht, dass Sie das haben, was Sie wollen. Auch das Wechseln zwischen den Blättern ist sehr unwirksam. Du hast
Sheets("Compiled Data").Select
Sie wechseln jedoch nie wieder zu Ihrem ersten Blatt.
Dies sollte reibungsloser laufen
c_old = 1 "Your "Name" column in original
c_new = 1 "Your "Name" column in Compiled Data
For r = 1 To ActiveSheet.Cells(Rows.Count, c_old).End(xlUp).Row
For j = 0 To 3
Sheets("Compiled Data").Cells(r, c_new + j) = Cells(r, c_old + j)
Next j
Sheets("Compiled Data").Cells(r, c_new + 4) = Cells(r, c_old + 13)
Next r