AW: Schleife bauen
Trägheit
» Zum einen werden die jetzt erst untereinander gesetzt und dann in die 2. Spalte. Eigentlich sollten es 3 Spalten werden bei den die ersten 3 Werte von links nach recht in die Spalten geschrieben werden
Einfach die Variablen miteinander tauschen - beschäftige dich bitte mit der Berechnung und warum das so funktioniert.
» und kann ich das "With .Range("A1:A6")" auch auf alle Zellen in der Spalte die Inhalt haben setzen? Können nur 6 oder 8 sein, aber eben auch 150.
Da solltest du dich mal hier im Forum umsehen. Diese Frage kommt gefühlt jeden Tag aufs Neue. (in Kürze:
Range.End(xlUp) ansehen; hab es im Code angepasst)
» Und das Ziel müsste dann noch ein anderes Tabellenblatt sein.
Hier gibt es grundsätzliche verschiedene Wege das zu erreichen; Ausschneiden/Kopieren mit oder ohne Formatierung, das ist alles auf unterscheidliche Weise umsetzbar.
Wenn du einfach nur den Wert übertragen willst, dann z.B. so
Worksheets("AndereTabelle").Cells(lngTargetRow, lngTargetCol).Value = rngCell.Value
Hier der angepasste Code:
Option Explicit
Public Sub Test()
Dim rngCell As Excel.Range
Dim lngTargetRowOffset As Long
Dim lngTargetColOffset As Long
Dim lngColumns As Long
lngColumns = 3
With Worksheets("Tabelle1")
With .Range("A1", .Cells(.Rows.Count, "A").End(xlUp))
For Each rngCell In .Cells
lngTargetColOffset = (rngCell.Row - .Row) Mod lngColumns
lngTargetRowOffset = (rngCell.Row - .Row) \ lngColumns
Debug.Print rngCell.Address(False, False);
Debug.Print " = [" & rngCell.Row & ","; rngCell.Column & "]";
Debug.Print " := " & rngCell.Value; " -> ";
Debug.Print "[R+" & lngTargetRowOffset & ", C+"; lngTargetColOffset & "]"
Worksheets("AndereTabelle") _
.Range("B2") _
.Offset(lngTargetRowOffset, lngTargetColOffset) _
.Value = rngCell.Value
Next
End With
End With
End Sub
Hinweise:
* Während des Kopiervorgangs sollte Aktualisierung der UI deaktiviert sein - siehe Application.ScreenUpdating.
* Falls irgendwann Performance eine Rolle spielen sollte, empfiehlt sich - wie von Daniel gezeigt - die Transformation im Speicher durchzuführen und dessen Resultat ins Tabellenblatt zu schreiben.
* Die Debug-Zeilen kannst du gerne auskommentieren bzw. entfernen.
Ich würde mich hiermit aus dem Thema ausklinken. Für mich ist es erledigt.
Grüße