Zelleninhalte mit bestimmtem Abstand transponieren mit Schleife
Guten Mittag alle miteinander,
und nun direkt zu meiner Frage. Ich möchte auch noch daraufhin weisen, dass ich leider nicht sehr viel Ahnung von der Materie habe und sehr dankbar für jegliche Hilfe wäre.
Ich habe folgendes in meinem Makro:
funktioniert alles wie es soll.
Eleganter wäre es jedoch mit einer Schleife (hab mir im Netz schon diverse Seiten dazu angesehen bin aber leider nicht ganz durchgestiegen). Desweiteren soll diese Schleife so lange laufen bis kein Inhalt mehr alle 40 Zeilen kommt.
Hintergrund: Es werden immer alle Textdateien aus einem Ordner importiert. Die Anzahl dieser Textdateien kann aber variieren und ist nicht festgelegt. Das Aussehen/Layout dieser Dateien ist immer das selbe.
Vielen Dank
MfG
Jonas
und nun direkt zu meiner Frage. Ich möchte auch noch daraufhin weisen, dass ich leider nicht sehr viel Ahnung von der Materie habe und sehr dankbar für jegliche Hilfe wäre.
Ich habe folgendes in meinem Makro:
Range("B11:B40").Select
Selection.Copy
Range("D6").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("B51:B80").Select
Selection.Copy
Range("D46").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("B91:B120").Select
Selection.Copy
Range("D86").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
funktioniert alles wie es soll.
Eleganter wäre es jedoch mit einer Schleife (hab mir im Netz schon diverse Seiten dazu angesehen bin aber leider nicht ganz durchgestiegen). Desweiteren soll diese Schleife so lange laufen bis kein Inhalt mehr alle 40 Zeilen kommt.
Hintergrund: Es werden immer alle Textdateien aus einem Ordner importiert. Die Anzahl dieser Textdateien kann aber variieren und ist nicht festgelegt. Das Aussehen/Layout dieser Dateien ist immer das selbe.
Vielen Dank
MfG
Jonas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 283501
Url: https://administrator.de/contentid/283501
Ausgedruckt am: 03.12.2024 um 19:12 Uhr
4 Kommentare
Neuester Kommentar
Guten Morgen Jonas,
Grüße Uwe
Hat denn keiner eine Idee?...
na na nicht so ungeduldig, sind halt nicht immer alle Spezis in jeder Minute parat ...Sub Transpose()
Application.ScreenUpdating = False
With ActiveSheet
For i = 11 To .Cells(Rows.Count, "B").End(xlUp).Row - 29 Step 40
.Range("B" & i & ":B" & i + 29).Copy
.Range("D" & i - 5).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Next
End With
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub
Man kann immer auf mehreren Wegen sein Ziel erreichen, wenn man den Inhalt deiner Zellen genau kennt. Eine While Schleife ist natürlich eine andere Möglichkeit dies zu realisieren. Da ich aber den Inhalt deines Sheets nicht kannte war das ermitteln der letzten belegten Zelle von unten her in Spalte B das bevorzugte Mittel der Wahl, den. Es hätte ja sein können das es mehrere unbelegte Zellen dazwischen hätte geben können.
Man arbeitet hier besser immer mit Range-Objekten und Zuweisen von Zellen anstatt immer wieder die Selection zu verschieben, das ist sehr sehr ineffizient, gerade bei Operationen die zehntausende Zellen verarbeiten müssen.
Das was der Makrorekorder aufzeichnet ist nicht das Optimum und spiegelt nur das wieder was der User mit seiner Maus macht. Effizienter Code sieht aber meist ganz anders aus.
Dafür das du noch wenig Ahnung von VBA mit Excel hast ist das doch in Ordnung, auch wenn es so wie's ausschaut irgendwo abgekupfert wurde ;-/. Für mich ist das ganze natürlich ziemlich umständlich gelöst, aber wie gesagt, jeder hat mal klein angefangen. Mit der Zeit entdeckt man immer bessere Methoden in Excel, da das Objektmodell sehr viele verschiedene Möglichkeiten bietet auf Zellen auch in Relation zueinander zu verweisen.
Also, ab und zu statt Google mal die VBA-Doku von Excel lesen, denn es ist meist sowieso besser eine Sprache von Grund auf zu erlernen.
Viel Erfolg weiterhin, und nicht zu ungeduldig sein, das produziert beim Programmieren meist nur Fehler die einem auf den ersten Blick nicht auffallen, dann aber später zu Tage treten weil man sie einfach nicht bedacht hat.
Grüße Uwe
p.s. wenns das dann war, bitte noch als Gelöst markieren.
Oder würdest du sagen das ist schlichtweg rotz?
Die ganzen manuellen Selects machen so ein Skript extrem langsam, aber da du ein Anfänger bist weist du es eben noch nicht besser Man arbeitet hier besser immer mit Range-Objekten und Zuweisen von Zellen anstatt immer wieder die Selection zu verschieben, das ist sehr sehr ineffizient, gerade bei Operationen die zehntausende Zellen verarbeiten müssen.
Das was der Makrorekorder aufzeichnet ist nicht das Optimum und spiegelt nur das wieder was der User mit seiner Maus macht. Effizienter Code sieht aber meist ganz anders aus.
Dafür das du noch wenig Ahnung von VBA mit Excel hast ist das doch in Ordnung, auch wenn es so wie's ausschaut irgendwo abgekupfert wurde ;-/. Für mich ist das ganze natürlich ziemlich umständlich gelöst, aber wie gesagt, jeder hat mal klein angefangen. Mit der Zeit entdeckt man immer bessere Methoden in Excel, da das Objektmodell sehr viele verschiedene Möglichkeiten bietet auf Zellen auch in Relation zueinander zu verweisen.
Also, ab und zu statt Google mal die VBA-Doku von Excel lesen, denn es ist meist sowieso besser eine Sprache von Grund auf zu erlernen.
Viel Erfolg weiterhin, und nicht zu ungeduldig sein, das produziert beim Programmieren meist nur Fehler die einem auf den ersten Blick nicht auffallen, dann aber später zu Tage treten weil man sie einfach nicht bedacht hat.
Grüße Uwe
p.s. wenns das dann war, bitte noch als Gelöst markieren.