2016-10-06 3 views
0

Was versucht wird, ist es, 3 erste Zellen aus dem Blatt "Arkusz1" zu kopieren und das Blatt "Arkusz2" in die erste leere Spalte und die erste leere Zeile in dieser Spalte einzufügen. Danach wiederholt sich der Prozess. Ich habe Code, der es in die erste leere Zeile in Spalte A einfügt, aber es funktioniert nicht richtig wie oben beschrieben. Ich werde jede Hilfe schätzen.Einfügen von Zellen in die erste leere Zeile und leere Spalte

Skok = Sheets("Arkusz3").Range("B1").Value 
ActiveCellRow = ActiveCell.Row 
Dim NextRow As Range 
Set NextRow = Range(A + 1 & Sheets("Arkusz2").UsedRange.Rows.Count + 0) 
Worksheets("Arkusz1").Activate 
Sheets("Arkusz1").Range("A1").Select 
ActiveCell.Offset(Skok, 0).Activate 
Range("A1", ActiveCell.Offset(-1, 0)).Select 
Selection.Copy 
Worksheets("Arkusz2").Activate 
NextRow.PasteSpecial Paste:=xlValues, Transpose:=False 
Application.CutCopyMode = False 
Set NextRow = Nothing 
+0

Werden A1, A2, A3 auf pg1 immer auf A1, A2, A3 auf pg2 gehen? Oder das zweite Mal wird A1, A2, A3 auf pg1 auf A4, A5, A6 auf pg 2 gehen? – Josh

+0

Das zweite Mal sollte es nach Wert in Blatt "Arkusz3" Zelle B1 gehen. Beispiel wenn diese Zelle 3 enthält, sollte sie nächstes Mal auf A4, A5, A6 gehen. – eurano

Antwort

1

In diesem Beispiel I A1 nähme, A2, A3 von Blatt 1, und es auf dem Blatt zu kopieren 2. Dann wird es auf den nächsten Satz pro Iterierte nach unten gehen (A4, A5, A6 und so weiter) . Allerdings bin ich nicht ganz sicher, was Sie erwarten, also sollte dies ein guter Anfang sein.

Dim s1a1 As String, s1a2 As String, s1a3 As String 
Dim s2a1 As Long, s2a2 As Long, s2a3 As Long 
Dim i As Integer 

s2a1 = 1 
s2a2 = 2 
s2a3 = 3 

For i = 1 To 6 


s1a1 = Worksheets("Arkusz1").Cells(1, "A") 
s1a2 = Worksheets("Arkusz1").Cells(2, "A") 
s1a3 = Worksheets("Arkusz1").Cells(3, "A") 

Worksheets("Arkusz2").Range("A" & s2a1) = s1a1 
Worksheets("Arkusz2").Range("A" & s2a2) = s1a2 
Worksheets("Arkusz2").Range("A" & s2a3) = s1a3 

s2a1 = s2a1 + 3 
s2a2 = s2a2 + 3 
s2a3 = s2a3 + 3 

Next i 
+0

@ScottCraner Wird Activate jemals schneller sein als das Referenzieren direkt in jeder Situation? – Josh

+0

Nein, jedes Mal, wenn VBA auf das Arbeitsblatt verweisen muss, wird es langsamer. Aus diesem Grund ist das Laden eines Zellenbereichs in ein Array und das Iterieren durch das Array schneller als das direkte Durchlaufen der Zellen. Bei Arrays machen Sie die Kreuzung nur einmal statt einer für die Anzahl der Zellen im Bereich. Um den Code in vba zu beschleunigen, beschränken Sie die Anzahl der Zeit, auf die das Arbeitsblatt referenziert wird, so viel wie möglich im Speicher und nicht auf dem Blatt. Es gibt Zeiten, in denen Aktivieren und Auswählen nicht vermieden werden kann, aber sie sind sehr sehr wenige. –