Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in Spalten Blockweise Kopieren

Forumthread: Daten in Spalten Blockweise Kopieren

Daten in Spalten Blockweise Kopieren
03.04.2017 14:27:18
Sandro
Hallo Zusammen
Ich habe folgende Ausgangslage:
7 Spalten (A-G), 6 davon sind lückenlos mit Daten gefüllt (A-F), ca. 1000 Zeilen lang. Spalte(G) hat in unterschiedlichen Abständen eine Variable Zahl (Die sogenannte Klassierungsnummer) drinstehen. Nun möchte ich diese Daten Blockweise in ein zweites Tabellenblatt kopieren. Ein Block besteht aus allen Daten der 7 Spalten (A-G), bis die nächste Klassierungsnummer in Spalte G kommt. Der nächste Block soll dann neben den ersten Block kopiert werden.
Beispiel:
Block 1 wird im Tabellenblatt 2 kopiert und füllt die Zellen A66 bis G66 Block 2 kommt rechts daneben und füllt die Zellen H120 bis N120 usw.
Kennt jemand dafür eine schlaue Lösung?
Vielen Dank & Gruss
Sandro
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Wie sehen die Klassierungsnummern aus?..owT
03.04.2017 14:29:10
Max2

AW: Wie sehen die Klassierungsnummern aus?..owT
03.04.2017 14:31:05
Sandro
Die Klassierungsnummern sind immer 4-Stellige Zahlen ohne Punkt oder Komma.
Bsp:
4556
4887
4792
...
AW: Wie sehen die Klassierungsnummern aus?..owT
03.04.2017 14:32:44
Jonas
Hallo Sandro,
ich glaube ich habe schon eine Idee könntest du vllt ein Bild der Tabelle hochladen um das besser nachvollziehen zu können :) ?
Gruß Jonas
Anzeige
AW: Wie sehen die Klassierungsnummern aus?..owT
04.04.2017 07:57:47
Sandro
Hallo Jonas,
Das wäre ja super!
Hier die Beispiel-Datei:
https://www.herber.de/bbs/user/112608.xlsx
Mittlerweile hatte ich noch einen Verbesserungsvorschlag für die ursprüngliche Idee. Wenn du jedoch nur eine Lösung für das ursprüngliche Problem hast, hilft mir das auch schon weiter!
Die Daten der 7 Spalten Blockweise in ein zweites Tabellenblatt übernehmen. Jedoch nicht alle 7 Spalten. Nur die Daten der Spalten A bis C als Überschrift die Klassierungsnummer (G) und die Maschinennummer (F). Ein Block besteht also aus den Daten der 3 Spalten (A-C), bis die nächste Klassierungsnummer in Spalte G kommt mit der Überschrift G & F. Der nächste Block soll dann neben den ersten Block kopiert werden.
In der Beispieldatei habe ich die Blöcke zum besseren Verständnis unterschiedlich eingefärbt. Auf dem zweiten Tabellenblatt habe ich dargestellt, wie das Endergebnis aussehen sollte.
Gruss
Sandro
Anzeige
Vorschlag
03.04.2017 14:47:02
Max2
Hallo,
hier ein kleiner nicht weitreichend getesteter Code:

Sub a()
Dim ws As Worksheet, ws2 As Worksheet
Dim rng As Range, c As Range
Dim rngToCopy As Range
Dim lZeile As Long
Dim lspalte As Long
Dim latestPoint As Long
latestPoint = 2
Set ws = ThisWorkbook.Sheets(1)
Set ws2 = ThisWorkbook.Sheets(2)
With ws
lZeile = .Cells(.Rows.Count, 1).End(xlUp).Row 'Letzte zelle in Spalte A
Set rng = .Range(.Cells(3, 7), .Cells(lZeile, 7))
For Each c In rng
If c.Value  "" Then
Set rngToCopy = .Range(.Cells(latestPoint, 1), .Cells(c.Row, 7))
latestPoint = c.Row
rngToCopy.Copy
With ws2
lspalte = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
.Range(.Cells(1, lspalte), .Cells(c.Row, lspalte + 6)).PasteSpecial Paste:= _
xlPasteValues
End With
End If
Next c
End With
End Sub

Anzeige
AW: Vorschlag
03.04.2017 15:03:59
Sandro
Hallo Max,
Dein Code macht fast das was ich möchte, das einzige was noch stört ist, dass er immer am Ende des Blocks die Klassierungsnummer des nächsten Blocks hinschreibt.
Hier die Datei zum veranschaulichen:
https://www.herber.de/bbs/user/112585.xlsm
Gruss Sandro
Anzeige
AW: Vorschlag
03.04.2017 16:04:13
Max2
Hallo, dann musst du einfach: "latestPoint = c.Row + 1" schreiben.
AW: Vorschlag
04.04.2017 07:52:30
Sandro
Hallo Max,
Mit latestPoint = c.Row + 1 funktioniert es auch nicht wunschgemäss...
Gruss
Sandro
Mein Fehler tut mir leid...
04.04.2017 08:56:26
Max2
Hallo,
tut mir leid, um die Nummer des letzten Blockes raus zu bekommen
muss du natürlich folgendes machen:
Set rngToCopy = .Range(.Cells(latestPoint, 1), .Cells(c.Row - 1, 7))

(latestPoint = c.Row+1 einfach wieder in: latestPoint = c.Row, abändern)
Das Fettmarkierte ist das entscheidende.
Der Code sucht nach der nächsten Nummer und bei einem treffer kopiert er jetzt alles bis zu Zeile vor der nächsten Nummer, das war vorher falsch, da er eben bis zur Nummer markiert und kopiert hat.
Nochmals entschuldigung.
Anzeige
AW: Mein Fehler tut mir leid...
04.04.2017 09:27:33
Sandro
Hallo Max,
Das ist genial, jetzt funktioniert es. Den letzten Block muss ich manuell kopieren, das ist aber ein kleiner Aufwand im Vergleich zu vorher.
Könnte man das Makro evtl. noch optimieren? Meine Idee ist es, nur die ersten 3 Spalten zu kopieren und dann die Klassierungsnummer und die Maschinennummer als "Überschrift" zu übernehmen.
Habe das hier mal mit Farben versucht etwas zu veranschaulichen:
https://www.herber.de/bbs/user/112616.xlsx
Gruss
Sandro
Anzeige
Hier die Mappe
04.04.2017 10:03:50
Max2
Hallo,
unten die Mappe mit anpassung.
Ich habe in den Code noch eingefügt, dass jetzt rechts neben Klassierung auf Tab2 noch
von Zeile bis Zeile steht, damit der Nutzer sich besser orientieren kann, bzw suchen kann.
Willst du das nicht haben, muss einfach alles im Code Löschen wo "bZeile" und "vZeile" steht.
Das Problem mit dem letzten Datensatz habe ich auch noch gelöst.
Desweiteren habe ich auf Tab1, zwei Buttons eingefügt, einer davon Löscht ALLE! Daten und Formate
auf Tab2, sollen nur die Daten und nicht die Formate gelöscht werden, musst du einfach
folgendes Löschen: "ThisWorkbook.Sheets(2).ClearFormats"
Hier deine Mappe: https://www.herber.de/bbs/user/112617.xlsm
Anzeige
AW: Hier die Mappe
04.04.2017 10:41:24
Sandro
Hallo Max,
Wow! Deine Lösung ist der absolute Hammer! Die Funktion mit Von/Bis ist echt nice to have.
Echt super wie schnell du diese Lösung zusammengestellt hast. Vielen Dank nochmals!
Gruss
Sandro
Kein Problem und Danke für Rückmeldung... owT
04.04.2017 10:45:04
Max2

AW: Daten in Spalten Blockweise Kopieren
03.04.2017 14:36:52
Sandro
Hier noch eine Beispieldatei mit etwas weniger Daten als Normalerweise:
https://www.herber.de/bbs/user/112582.xlsx
Anzeige
AW: Daten in Spalten Blockweise Kopieren
03.04.2017 14:44:07
Werner
Hallo Sandro,
dann kopier doch mal von Hand 2 oder 3 Blöcke von Tabelle1 in Tabelle2 (so wie du das Ergebnis haben willst) und lade die Beispielmappe dann nochmals hoch.
Mir zumindes ist noch nicht klar, wie dein Ergebnis aussehen soll.
Gruß Werner
AW: Daten in Spalten Blockweise Kopieren
03.04.2017 14:47:46
Sandro
Hallo Werner,
Ich habe nun in dem 2. Tabellenblatt mein Ergebnis von Hand Dargestellt. Ich hoffe, nun ist es verständlicher.
https://www.herber.de/bbs/user/112583.xlsx
Gruss Sandro
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Daten blockweise in Excel kopieren


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei. Stelle sicher, dass die Daten in den Spalten A bis G vorhanden sind. Die Klassierungsnummern sollten in Spalte G stehen.

  2. Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Rechtsklick auf "VBAProject (deinDateiname)".
    • Wähle Einfügen > Modul.
  4. Kopiere den folgenden Code in das Modul:

    Sub DatenBlockweiseKopieren()
       Dim ws As Worksheet, ws2 As Worksheet
       Dim rng As Range, c As Range
       Dim rngToCopy As Range
       Dim lZeile As Long
       Dim lspalte As Long
       Dim latestPoint As Long
    
       latestPoint = 2
       Set ws = ThisWorkbook.Sheets(1)  ' Tabelle mit Daten
       Set ws2 = ThisWorkbook.Sheets(2)  ' Ziel-Tabelle
    
       With ws
           lZeile = .Cells(.Rows.Count, 1).End(xlUp).Row ' Letzte Zelle in Spalte A
           Set rng = .Range(.Cells(3, 7), .Cells(lZeile, 7)) ' Spalte G
    
           For Each c In rng
               If c.Value <> "" Then
                   Set rngToCopy = .Range(.Cells(latestPoint, 1), .Cells(c.Row - 1, 7))
                   latestPoint = c.Row
                   rngToCopy.Copy
                   With ws2
                       lspalte = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
                       .Range(.Cells(1, lspalte), .Cells(c.Row - 1, lspalte + 6)).PasteSpecial Paste:=xlPasteValues
                   End With
               End If
           Next c
       End With
    End Sub
  5. Schließe den VBA-Editor und gehe zurück zu Excel.

  6. Führe das Makro aus: Drücke ALT + F8, wähle DatenBlockweiseKopieren aus und klicke auf Ausführen.


Häufige Fehler und Lösungen

  • Fehler: Das Makro kopiert die Klassierungsnummer des nächsten Blocks.

    • Lösung: Stelle sicher, dass du die Zeile Set rngToCopy = .Range(.Cells(latestPoint, 1), .Cells(c.Row - 1, 7)) verwendest, um nur die relevanten Daten zu kopieren.
  • Fehler: Das Makro kopiert nicht die gewünschten Spalten.

    • Lösung: Passe den Range in der Zeile Set rngToCopy = .Range(.Cells(latestPoint, 1), .Cells(c.Row - 1, 7)) an, falls du nur bestimmte Spalten (A-C und G-F) benötigen solltest.

Alternative Methoden

Eine alternative Methode wäre, Daten manuell zu kopieren, wenn die Anzahl der Blöcke überschaubar ist. Du kannst auch Power Query verwenden, um Daten blockweise zu transformieren und zu laden.

  1. Öffne Power Query:

    • Gehe zu Daten > Daten abrufen > Aus anderen Quellen > Leere Abfrage.
  2. Nutze M-Code, um die Daten zu filtern und blockweise zu kopieren.


Praktische Beispiele

Wenn du die oben genannten Schritte befolgst, kannst du beispielsweise folgende Struktur erreichen:

  • Tabellenblatt 1: Enthält die Daten von A1 bis G1000.
  • Tabellenblatt 2: Enthält die blockweise kopierten Daten ab A1, jeder Block wird in eine neue Spalte eingefügt.

Du kannst auch zusätzliche Bedingungen implementieren, um das Ergebnis weiter zu verfeinern.


Tipps für Profis

  • Nutze Tastenkombinationen: Das Arbeiten mit Makros wird schneller, wenn du die Tastenkombinationen für häufige Aktionen beherrschst.
  • Kommentiere deinen Code: Dies hilft dir, später Änderungen einfacher vorzunehmen und den Code besser zu verstehen.
  • Teste auf kleineren Datenmengen: Bevor du das Makro auf großen Datenmengen anwendest, teste es mit einer kleinen Auswahl, um sicherzustellen, dass alles wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um nur drei Spalten zu kopieren? Du musst den Range in der Zeile Set rngToCopy anpassen, um nur die gewünschten Spalten auszuwählen.

2. Was tun, wenn das Makro nicht funktioniert? Überprüfe, ob du alle Schritte genau befolgt hast, insbesondere die Zuweisungen der Arbeitsblätter und die Bereiche. Manchmal kann ein kleiner Schreibfehler den Prozess stoppen.

3. Kann ich das Makro auch in anderen Excel-Versionen verwenden? Ja, das Makro sollte in den meisten Versionen von Excel funktionieren, die VBA unterstützen, wie Excel 2010, 2013, 2016 und 2019.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige