Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1640to1644
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Nur bestimmten Datenbereich kopieren

Nur bestimmten Datenbereich kopieren
27.08.2018 15:05:18
marco
Hallo Zusammen,
ich komme leider nicht weiter. :(
Im Tabellenblatt 1 ("Maske") werden Daten in eine Maske eingegeben und per Makro in eine Tabelle im Tabellenblatt 2 ("Daten aus Maske") eingetragen.
Die Tabelle im Tabellenblatt 2 ("Daten aus Maske") geht von der Spalte A bis BN und die ersten 3 Zeilen sind fixe Kopfzeilen.
Die in der Maske eingetragenen Daten befüllen die Tabelle in "Daten aus Maske" folgendermaßen:
Zeile 4: In die gesamte 4. Zeile, als von A4 bis BN4 werden Daten kopiert.
Zeile 5: Ab der 5. Zeile befüllen die Daten aus der Maske die Zeile erst ab Spalte J (also von J5 bis BN5).
Zeile 6: Auch hier: Die Daten aus der Maske befüllen die Zeile 6 erst wieder ab Spalte J (also von J6 bis BN6)
Zeile 7: Es ist völlig unklar, wie viele weitere Zeilen durch das Rüberkopieren aus der Maske entstehen.
.
.
Zeile 10: In meinem Beispiel ist die 10. Zeile, die letzte befüllte Zeile.
Nun möchte ich über ein neues Makro die Daten von A4 bis BN10 im Tabellenblatt "Daten aus Maske" in eine weitere Tabelle (mit den gleichen Kopfzeilen) in einem 3. Tabellenblatt ("Rohdaten") kopieren und sie gleichzeitig in der Tabelle "Daten aus Maske" löschen.
Wichtig, bzw. ausschlaggebend ist, dass die Tabelle in "Daten aus Maske" jedesmal eine unterschiedliche Anzahl von Zeilen haben kann. (Die 10 befüllten Zeilen hier sind nur ein Beispiel, es können auch mal 2 oder 5 oder 15 sein...)
Ich kenne den Code nicht, den es baucht, um dem Makro zu sagen, dass es in Spalte J ab Zeile 4 runterzählen soll, bis die erste leere Zeile kommt.
In meinem Beispiel müsste das Makro also ab Zelle J4 runterzählen und dann erkennen, dass Zelle J11 die erste leere Zelle in der Spalte J ist.
Also weiß das Makro, dass es den Bereich A4 bis BN10 in die nächste Tabelle im Tabellenblatt "Rohdaten" kopieren soll.
Ich wäre sehr sehr froh, wenn mir jemand den Code zum "Abzählen" der Spalte J und dann eben dem Kopieren des gesamten Bereichs von A4 bis BN__ nennen könnte.
viiiiieeeeelen Dank!
Marco

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Nur bestimmten Datenbereich kopieren
27.08.2018 16:48:48
Robert
Hallo Marco,
nachstehendes Makro ermittelt als erstes die Zeilen-Nr. der ersten leeren Zelle unterhalb der Zelle J4 um den zu kopierenden Bereich festlegen zu können. Als nächstes wird die Zeilen-Nr. unterhalb der letzten befüllten Zelle in Spalte J der Tabelle "Rohdaten" ermittelt, um zu wissen, wohin die Daten kopiert werden sollen. Wenn auch noch eine Freizeile sein soll, muss das Ziel des Copy-Befehls noch in Destination:=wks2.Range("A" & lZ2 + 1) geändert werden. Anschließend wird der alte Datenbereich in der Tabelle "Daten aus Maske" gelöscht.
Sub Kopiere()
Dim lZ1 As Long, lZ2 As Long, wks1 As Worksheet, wks2 As Worksheet
Set wks1 = Sheets("Daten aus Maske")
Set wks2 = Sheets("Rohdaten")
'Zeile der ersten freie Zelle unter J4 in der Tabelle "Daten aus Maske")
lZ1 = wks1.Range("J4").End(xlDown).Row
'Zeile unter der letzten befüllten Zelle in Spalte J der Tabelle "Rohdaten"
lZ2 = wks2.Range("J" & Rows.Count).End(xlUp).Row + 1
'Daten kopieren
wks1.Range("A4:BN" & lZ1).Copy Destination:=wks2.Range("A" & lZ2)
'alten Datenbereich in Tabelle "Daten aus Maske" löschen
wks1.Rows("4:" & lZ1 + 1).Delete Shift:=xlUp
Set wks1 = Nothing
Set wks2 = Nothing
End Sub

Gruß
Robert
Anzeige
AW: Nur bestimmten Datenbereich kopieren
27.08.2018 18:18:04
marco
Hallo Robert,
vielen Dank für Deine schnelle Antwort.
Leider war ich etwas ungenau was die Kopfzeilen der beiden Tabellenblätter angeht:
Die Kopfzeile in "Daten aus Maske" entspricht den Zeilen 1-4
Die Kopfzeile in "Rohdaten" entspricht den Zeilen 1-3
Ich habe Deinen Code entsprechend angepasst:
Sub Kopiere()
Dim lZ1 As Long, lZ2 As Long, wks1 As Worksheet, wks2 As Worksheet
Set wks1 = Sheets("Daten aus Maske")
Set wks2 = Sheets("Rohdaten")
'Zeile der ersten freie Zelle unter J5 in der Tabelle "Daten aus Maske")
lZ1 = wks1.Range("J5").End(xlDown).Row
'Zeile unter der letzten befüllten Zelle in Spalte J der Tabelle "Rohdaten"
lZ2 = wks2.Range("J" & Rows.Count).End(xlUp).Row + 1
'Daten kopieren
wks1.Range("A5:BN" & lZ1).Copy Destination:=wks2.Range("A" & lZ2)
'alten Datenbereich in Tabelle "Daten aus Maske" löschen
wks1.Rows("4:" & lZ1 + 1).Delete Shift:=xlUp
Set wks1 = Nothing
Set wks2 = Nothing
End Sub

Leider kommt bei mir immer die Meldung: "X 400" mit der Auswahl "ok" und "Hilfe"
Ich habe unter Extras die Verweise geprüft und folgende sind aktiv:
- Visual Basics for Applications
- Microsoft Excel 16.0 Object Library
- Microsoft Forms 2.0 Object Library
- atpvbean.xls (Nur diese konnte ich zum Test deaktivieren - Leider ohne Erfolg)
Hast Du eine Idee, was diese Meldung "400" auslösen könnte und was ich dagegen machen kann?
Vielen Dank nochmals und Grüße
Marco
Anzeige
AW: Nur bestimmten Datenbereich kopieren
27.08.2018 19:51:27
Robert
Hallo Marco,
tut mir leid. Mit dem Fehler kann ich nichts anfangen. Bei mir hier (Excel2007) klappt es. Kannst Du die Datei einstellen, damit man das am Original mal nachstellen kann? Sonst ist die Fehlersuche etwas schwierig.
Eine Anmerkung noch: Du hast den zu kopierenden Bereich geändert. Du kopierst jetzt ab der 5. Zeile. Gelöscht wird anschließend aber immer noch in der Tabelle "Daten aus Maske" ein Zellbereich ab der 4. Zeile, die letzte Kopfzeile wird also auch gelöscht.
Gruß
Robert
AW: Nur bestimmten Datenbereich kopieren
28.08.2018 11:48:34
marco
Hallo Robert,
vielen Dank nochmals für Deine Hilfe. Ich habe gerade eine ausführliche Erklärung geschrieben und wollte dann die Datei hochladen, was dazu geführt hat, dass meine Erklärung weg war..
Also nochmal ;)
Hier müsste die Datei zu finden sein:
https://www.herber.de/bbs/user/123612.xlsx
Meine Aufgabe: Ich muss ein paar Daten über Cremes notieren und mir dann die Rezensionen dazu anschauen und auswerten. Also immer eine Creme und eine Anzahl n an Rezensionen dazu.
Somit habe ich unter "Maske" zwei Makros erstellt.
1. "Neue Creme einpflegen"
2. "Rezension einpflegen"
Der Ablauf sollte so funktionieren:
1. DIe händisch in A3:I3 eingegebenen Daten sollten über das Makro "Neue Creme einpflegen" in die Tabelle der Mappe "Daten aus Maske & Summen" beginnend bei A5 kopiert und in der Maske wiederum gelöscht werden.
2. Nun kann die untere (Rezensions-)Tabelle in "Maske" ausgefüllt werden. Über das Makro "Rezension einpflegen", werden die Daten aus der Maske in die Tabelle der Mappe "Daten aus Maske & Summen" beginnend in J5 kopiert und in der Maske gelöscht. (das funktioniert bereits)
Was hier noch fehlt:
Die jeweils händisch eingetragenen Textfragmente (TF) in der unteren Tabelle in "Maske" wie beispielsweise in den Zelle B8, F8, J8, N8 usw. müssen parallel noch in die Tabelle in der Mappe "Matrix" kopiert werden. Dies muss wahrscheinlich über eine If-Bedinung gelöst werden:
Wenn im Reiter "Maske" in Zelle B8 ein TF eingefügt wurde (wie in meinem Beispiel "Test 2")und in C8 eine "1" steht, dann kopiere den Inhalt aus B8 in die letzte freie Zelle der Spalte B in der Mappe "Matrix".
Oder:
Wurde im Reiter "Maske" in Zelle B8 ein TF eingefügt (wie in meinem Beispiel "Test 2")und in D8 eine "1" , dann kopiere den Inhalt aus C8 in die letzte freie Zelle der Spalte C in der Mappe "Matrix".
Wurde weder in C8, noch in D8 eine "1" eingetragen, dann wurde auch in B8 keine Textfragment eingetragen, was dazu fürht, dass in E8 eine "1" generiert wird, die aber für die Mappe "Matrix" egal ist.
Dies müsste dann für alles Gruppen ("Hilft bei trockener Haut", "Hilft bei fettiger Haut" usw.) gemacht werden.
Der Inhalt der Zelle J16 (Unklares Textfragment) müsste, sofern ausgefüllt, ebenfalls in die Matrix in die letzte Spalte kopiert werden.
Nun können beliebig viele Rezensionen zu einer Creme eingetragen werden.
3. Wenn nun zur Creme alle Rezensionen eingetragen und jeweils über "Rezension einpflegen" in die Tabelle in der Mappe "Daten aus Maske & Summen" übertragen wurden, ist es Zeit unter "Maske" A3:I3 eine neue Creme einzutragen.
4. Wenn man nun auf "Neue Creme einpflegen" klickt, sollte wiederum Folgendes passieren:
- Die automat. berechneten Summen in Zeile 3 aus "Daten aus Maske & Summen" (also L3, M3, N3 usw.) werden zusammen mit den "alten" Cremeinformationen (A5:I5 aus "Daten aus Maske & Summen") in die Tabelle in Mappe "Daten f. Auswertung" kopiert. Das funktioniert derzeit auch ganz gut.
- Anschließend sollen alle Daten aus "Daten aus Maske & Summen" ab A5:BN*variabel* in die Tabelle in der Mappe "Rohdaten" kopiert und in "Daten aus Maske & Summen" gelöscht werden.
- Abschließend sollen die vorne in der Maske neu eingetragenen (A3:I3) Cremeinformationen in die Tabelle der Mappe "Daten aus Maske & Summen" ab A5:I5 kopiert und aus der Maske gelöscht werden.
Jetzt wäre man wieder am Anfang und kann für die gerade eingetragenen 2. Creme die neuen Rezensionen eintragen.
Ich hoffe ich habe das einigermaßen verständlich erklärt und wäre Dir zutiefst dankbar, wenn Du mir mit dem Code helfen kannst. Sollte es bei der If-Bedinung Fleißarbeit benötigen, dann kannst Du mir ja nur den ersten Fall zeigen und den Rest mache ich dann selber.
Es wäre echt super nett, wenn Du mir helfen könntest.
Vielen Vielen Dank!
Marco
Anzeige
AW: Nur bestimmten Datenbereich kopieren
28.08.2018 18:44:37
Robert
Hallo Marco,
wenn Du das nächste Mal Hilfe zum Ergänzen von Makros brauchst, wäre es gut, wenn Du als Beispiel-Datei eine Datei mit den bereits vorhandenen Makros und nicht eine ohne Makros einstellst. So musste ich praktisch wieder von Null anfangen.
Ich bin mal davon ausgegangen, dass der ominöse Fehler 400 nicht mehr auftritt. Da ich Deine alten Makros nicht kenne, habe ich mal neue Makros in Deine Datei eingebaut. Mit diesen Makros, die Du über die entsprechenden Buttons starten kannst, passiert folgendes.
1. Makro "NeueCremEinpflegen()"
1.1 Die Daten aus der Tabelle "Daten aus Maske & Summen" werden in die Tabelle "Daten f.Auswertung" und die Tabelle "Rohdaten" jeweils unter die letzte befüllte Zeile kopiert.
1.2 Die Daten aus den Tabellen "Daten aus Maske & Summen" und "Maske" werden gelöscht. Danach kann dann ein neues Produkt erfasst werden.
2. Makro "DatenEinpflegen()"
2.1 Falls in der Tabelle "Daten aus Maske & Summen" noch kein Produkt eingetragen ist, werden die Produktdaten aus der Tabelle "Maske" (Bereich A3:I3) kopiert.
2.2 Die Rezesionen werden von der Tabelle "Maske" unter die letzte befüllte Zeile in der Tabelle "Daten aus Maske & Summen" kopiert.
2.3 In der Tabelle "Maske" werden die Rezesions-Daten gelöscht.
In der Tabelle "Matrix" habe ich Formeln eingegeben, so dass dort automatisch die Daten aus der Tabelle "Daten aus Maske & Summen" erscheinen. Dafür habe ich mal 28 Zeilen vorgesehen. Sollten mehr Rezessionen geschrieben werden, können die Formeln einfach nach unten weiter kopiert werden. Die Tabellen "Daten aus Maske & Summen" und "Rohdaten" habe ich um eine Spalte "Unklares TF" erweitert, damit diese Daten auch erfasst werden.
Schau Dir die Datei mal an, ob es ungefähr so ist, wie Du es möchtest und welche Fehler mir auf die Schnelle noch unterlaufen sind.
https://www.herber.de/bbs/user/123622.xlsm
Gruß
Robert
Anzeige
AW: Nur bestimmten Datenbereich kopieren
30.08.2018 09:10:57
marco
Hallo Robert,
zuerst vielen Dank für deine Hilfe.
Leider wurde ich von der website gehindert meine Excel mit dem Makros hochzuladen?! Oder ich habe nicht verstanden, wie das gehen soll..sorry!
Deine Codes helfen mir sehr weiter! 1.000 Dank dafür!
Bester Mann! ;)
Viele Grüße
Marco
Gerne und Danke für die Rückmeldung
30.08.2018 16:31:48
Robert
Hallo Marco,
der Upload von xlsm-Dateien funktioniert genauso wie der Upload von xlsx-Dateien. Man muss halt nur darauf achten, dass die Datei nicht größer als 300 KB ist. Außerdem sollte im Dateiname (einschl. Pfad) kein Leerzeichen enthalten sein. Bei anderen Sonderzeichen (z. B. Umlaute) hatte ich auch schon Probleme.
Gruß
Robert
Anzeige

319 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige