Autor
|
Thema: VBA Tabelle kopieren von Zeile bis Zeile (4101 / mal gelesen)
|
Sebke Mitglied
Beiträge: 3 Registriert: 11.01.2016
|
erstellt am: 11. Jan. 2016 12:00 <-- editieren / zitieren --> Unities abgeben:
Hallo. Ich bin absoluter Neuling auf dem Gebiet Makros und VBA. Ich möchte gerne mittels Makro Werte aus Tabelle1 in Tabelle2 kopieren. Es sollen alle Spalten einer Zeile übernommen werden. In Tabelle1 beginnen die Werte in Zeile 2 und diese sollen auch in die zweite Zeile in Tabelle2 geschrieben werden. Ich habe hierzu zb folgenden Code ausprobiert: Worksheets("Tabelle1").Range("A2:A10").EntireRow.Copy Destination:=Worksheets("Tabelle2").Range("A2") Jetzt werden also die Zeilen A2 bis A10 aus Tabelle1 in Tabelle2 ab A2 kopiert. Jetzt wird es für mich aber zu kompliziert: Ich möchte die zu kopierende Range in Tabelle1 anders befüllen. In Tabelle3 der selben Arbeitsmappe habe ich mit einer "Nebenrechnung" ermittelt von welcher Zeile bis zu welcher Zeile ich die Daten aus Tabelle1 kopiert haben möchte. So steht in Tabelle3 in Zelle I2 der Wert 677 und in Zelle I3 der Wert 3253. Diese Werte sind also meine Grenzen. Aus Tabelle1 sollen also alle Zeilen von 677 bis 3252 kopiert werden. Und diese Grenzen können sich immer ändern. Ich frage mich also, wie ein Makro aussehen muss, in das die Zellen I2 und I3 aus Tabelle3 quasi als "Zeilenquelle" eingebaut sind. In Excel würde ich sowas mit der INDEX Formel lösen. Aber es soll am Ende das Makro mit einer Schaltfläche verknüpft werden, die dann das Makro ausführt. ich würde mich über Vorschläge sehr freuen und sage jetzt schon mal Danke. Gruß Sebke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 11. Jan. 2016 14:31 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Hallo Sebke, willkommen im Forum Zunächst einmal ist es immer sinnvoll eine Beispiel.xls mit anzuhängen, das erspart das selber ausfüllen von erfundenen Daten zum testen und ermuntert manchen sich mit dem Problem zu beschäftigen. Dann verwende ich ungern die Range("A2:A10") Schreibweise, mit cells(reihe, spalte) ist man hier flexibler. Nun ein Beispielcode wie Du das lösen könntest:
Code:
Sub Kopieren() ' Dein Code ' Worksheets("Tabelle1").Range("A2:A10").EntireRow.Copy Destination:=Worksheets("Tabelle2").Range("A2") Dim Anfang As Long, Ende As Long Anfang = Worksheets("Tabelle3").Cells(2, 9) ' Zelle "I2" Ende = Worksheets("Tabelle3").Cells(3, 9) ' Zelle "I3" ' Hier hätte auch AktiveSheet.cells(reihe,spalte) stehen können wenn beim Aufruf des Makro das Tabellenblatt mit den Kopierangaben sichbar ist With Worksheets("Tabelle1") .Range(.Cells(Anfang, 1), .Cells(Ende, 1)).EntireRow.Copy Destination:=Worksheets("Tabelle2").Range("A2") End With End Sub
Grüße Klaus [Diese Nachricht wurde von KlaK am 11. Jan. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sebke Mitglied
Beiträge: 3 Registriert: 11.01.2016
|
erstellt am: 11. Jan. 2016 15:10 <-- editieren / zitieren --> Unities abgeben:
hallo Klaus. Vielen Dank für deine Antwort. Echt super, wie schnell mir geholfen werden konnte. Ich hab vorher auch noch etwas rumprobiert und bin zusammen mit deinen Ideen zu folgender Lösung gekommen: Public Sub kopieren() Dim x As Long Dim y As Long x = Worksheets("Tabelle3").Cells.Item(2, "I") y = Worksheets("Tabelle3").Cells.Item(3, "I") Worksheets("Tabelle1").Range("A" & x & ":A" & y).EntireRow.Copy Destination:=Worksheets("Tabelle2").Range("A2") End Sub jetzt funktioniert alles top und das Kopieren dauert nur noch wenige Sekunden. Vorher hatte ich nämlich die gewünschten Zeilen alle über eine Nebenrechnung in Excel mit einem x markiert und dann mit diesem Code kopiert: Public Sub Zeilen2() Dim i As Long Dim cell As Range Application.Calculation = xlCalculationManual i = 2 For Each cell In Tabelle1.Range("AF:AF") If Not cell Is Nothing Then If cell.Value = "x" Then cell.EntireRow.Copy Destination:=Tabelle2.Rows(i) i = i + 1 End If End If Next cell Application.Calculation = xlCalculationAutomatic End Sub Da ist Excel schon fast an seine Grenzen gestoßen und meine Geduld für die Berechnung schon längst ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 11. Jan. 2016 16:14 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Hallo Sebke, schön dass Dir die Lösung geholfen hat Habe mit diesem Beitrag dann auch das Erledigt - Häkchen gesetzt, dann wissen andere Aufrufer des Excel-forums auch dass es bereits eine Lösung gibt. Das vereinfacht das Durchsuchen des Forums und sollte immer bei einer gefundenen Lösung erfolgen. Alternativ kann der Threadersteller natürlich auch dem Antwortenden noch Unities zukommen lassen (dort wo steht: nur für Sebke: 10 + (Häkchen)) Als Tip fürs nächste Mal Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sebke Mitglied
Beiträge: 3 Registriert: 11.01.2016
|
erstellt am: 12. Jan. 2016 07:56 <-- editieren / zitieren --> Unities abgeben:
|
Bruderlori Mitglied
Beiträge: 11 Registriert: 13.07.2017 Office 2013 Win10 prof.
|
erstellt am: 13. Jul. 2017 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Hallo zusammen Ich habe ein ähnliches Problem wie oben schon beschrieben. Meine Mitarbeiter befüllen momentan eine Excel Datenbank mit Leistungsdaten. Diese Tabelle ist leider in den letzten Wochen so groß geworden das es für die Jungs zum öffnen und schließen ewig dauert. Die Idee ist der Mitarbeiter gibt seine Daten in eine Tabelle ein welche beim Speichern die neuen Datensätze in meine Datenbank kopiert. Und natürlich die alten Daten nach einer Zeitspanne x aus der Eingabe Datei löscht. Eventuell ist es möglich die Daten auch direkt in eine Access Datenbank zu schreiben Ich habe mit VBA bis jetzt nur wenig gemacht und wenn mir meist nur eine Vorlage angepasst die ich im Netz gefunden habe. Vielleicht könnt Ihr mir ja helfen. Danke schon mal Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 13. Jul. 2017 17:11 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Hallo Bruderlori, Willkommen im Forum Da scheint ja an der grundsätzlichen Konzeption etwas schiefgelaufen zu sein wenn ihr zuerst Excel als Datenbank mißbraucht um dann festzustellen das ein Arbeiten kaum mehr möglich ist. Darf man fragen von welchen Datenmengen Du sprichst? Anzahl der Tabellen? Durchschnittliche Zeilen/Spaltenanzahl? Meist sind ja die Auswertetabellen das Problem bzw. unzählige Verknüpfungen die sich jedesmal neu berechnen. Wenn dann noch diverse eigene Funktionen mit z.B. Interpolationen dazukommen ... (Eine Abteilung bei uns hat auch so eine riesige Tabelle deren Neuberechnung > 5 min braucht ). Zum arbeiten hilft da nur bei den Berechnungsoptionen (Register Formeln) auf manuell zu stellen, dann die Änderungen durchzuführen und anschließend neu berechnen lassen. Je nach Größe und Aufgabenstellung kann man das ganze natürlich auch in eine Access.accdb oder .mdb oder gleich auf MS SQLServer oder mySQL transferieren. Vorteil einer Datenbank wäre natürlich dass eine gleichzeitige Bearbeitung eher möglich ist. Vielleicht magst Du uns aber noch ein wenig von dem Projekt und Konzept erzählen damit eine optimale Lösung gefunden werden kann. Makromäßig wäre es nicht das Problem. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bruderlori Mitglied
Beiträge: 11 Registriert: 13.07.2017 Office 2013 Win10 prof.
|
erstellt am: 13. Jul. 2017 17:55 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Hallo Ich hatte echt nicht damit gerechnet das es so schnell so groß wird. Wir sind jetzt bei ca. 85 MB angekommen in nichtmal 2 Monaten. Ich erfasse mit der Tabelle BDE Daten der Mitarbeiter. Erfasst werden solche Sachen wie Tag Mitarbeiter Startzeit EndZeit Artikelnummer usw. Das sind 10 Zellen pro Datensatz. Pro Tag kommen da ca. um die 240 Datensätze dazu. Momentan sind wir bei 6500 Zeilen angekommen. Pro Datensatz kommt dann nochmal die Berechnung pro Zeile mit 6 Zellen dazu. Die automatische Berechnung habe ich schon deaktiviert. Es macht natürlich Sinn das ganze direkt in eine Access Datenbank zuschreiben. Da weiß ich zwar wie man diese Anlegt aber dann hört es schon auf. Was meine Kollegen nicht möchten ist jeden Datensatz einzeln über eine Maske einzugeben. Da die Eingabe von jemand anderes gemacht wird und der das Blattpapier in die Tabelle übertragen muss. Die Eingabe direkt vom MA ist geplant dann wird es auch eine Maske geben. Also momentan möchte ich das die Datensätzen in eine Excell Tabelle eingegeben werden können. Das sind pro Schicht ca.80 Zeilen. Da ist der copy and paste Vorteil einfach super. Diese 80 Zeilen sollen beim Speichern in eine Datenbank übertragen werden. Am besten Access. Das kann ich lernen zu händeln. SQL ist für mich leider keine Option. Die zweite Anforderung wäre das die Eingabe Tabelle beim Speichern die Datensätze die älter als 3 Wochen sind löscht. Nur in der EingabeTabelle nicht in der Datenbank. Somit bleibt die Eingabe Datei immer gleich groß. Ich schau später mal ob ich eine Version zu Hause gespeichert habe dann lade ich diese mal hoch. Sonst leider erst morgen. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bruderlori Mitglied
Beiträge: 11 Registriert: 13.07.2017 Office 2013 Win10 prof.
|
erstellt am: 13. Jul. 2017 20:05 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
|
Bernd P Ehrenmitglied V.I.P. h.c. cook-general
Beiträge: 3358 Registriert: 07.06.2001
|
erstellt am: 14. Jul. 2017 08:10 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Servus, nachdem ich nicht annehme das die Berechnung in Zeile 6500 nötig ist sondern nur mehr der Wert, könntest die Formeln fixieren. ------------------ <----- Bitte Systeminfo eintragen, warum siehst du hier. Schöne Grüsse aus der Steiermark Bernd P. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bruderlori Mitglied
Beiträge: 11 Registriert: 13.07.2017 Office 2013 Win10 prof.
|
erstellt am: 14. Jul. 2017 09:29 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Hallo Ja die Berechnung wird zukünftig nicht mehr in der Datenbank passieren. Das wird aber nicht meine Frage lösen. Wie muss das Makro aussehen das die Daten die neu eingegeben werden in die Datenbank schreibt und Einträge löscht die älter als drei Wochen sind. Grüße Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 14. Jul. 2017 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Zitat: Original erstellt von Bruderlori: Wie muss das Makro aussehen das die Daten die neu eingegeben werden in die Datenbank schreibt und Einträge löscht die älter als drei Wochen sind.
Hallo Bruderlori, Du bist anscheinend ein sehr Ungeduldiger aber glaub mir es macht mehr Sinn sich zunächst einmal generell Gedanken zu den Zielen zu machen. Natürlich könnte ich Dir jetzt hier einen Code einstellen der aus Excel per SQL die Daten nach Access transporiert und dabei überprüft ob der Datensat in der DB schon verhanden ist. Vielleicht wäre es aber auch sinnvoller die Daten an Hand einer Eingabemaske direkt in die Datenbank einzugeben und dabei vorab schon für alle Eingaben Konstanten wie Schichtgruppe, Schicht, Personalnummer, Datum für alle weiteren Eingaben festzulegen. Artikelnummern könnte man aus einer weiteren Tabelle auswählen lassen. Aber egal. - Zunächst bräuchte man den Aufbau der Datenbank, wie heißen die Felder? Gleiche Bezeichnung wie Beschriftung in Exceltabelle Zeile 1 oder bleiben die Spalten immer gleich? - Dann stellt sich die Frage: Makro in der Excelmappe oder Übernahme aus Access-Datenbank? - Prinzipiell Datensätze die älter als z.B. drei Wochen löschen oder alle Datensätze die bei der letzten Datenübergabe bereits in der Datenbank vorhanden waren (Somit würde nur der letzte Import in der Exceltabelle stehen bleiben) Grüße Klaus PS.: Es wäre doch besser gewesen einen eigenen Thread daraus zu erstellen, denn das Thema ist doch etwas mehr als Kopieren Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bruderlori Mitglied
Beiträge: 11 Registriert: 13.07.2017 Office 2013 Win10 prof.
|
erstellt am: 14. Jul. 2017 11:25 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Hallo Das erfassen dieser Daten ist die letzten Monate gewachsen. Erst nur für zwei Arbeitsplätze. Das konnte man noch auf Papier realisieren. Jetzt ist das ganze schon für eine bestimmte Artikelgruppe gewachsen und soll am besten auf alle Mitarbeiter und alle Artikel ausgeweitet werden. Ca. 20 Mitarbeiter Stand jetzt ist: der Mitarbeiter füllt über den Zeitraum seiner Schicht ein Blatt Papier aus. Dieses Blatt wird momentan von einer anderen Person aus der nächsten Schicht in die Datenbank übertragen. Ziel ist: jeder Mitarbeiter kann die Eingabe über ein Tablet und einer Eingabe Maske direkt an seinem Arbeitsplatz machen. Die Arbeitsplätze sind aber momentan noch nicht ausgerüstet das das schnell umgesetzt werden kann wird wohl auch nicht (nächste zwei Monat) passieren. Dazu habe ich eine Accessdatenbank angelegt und eine Eingabe Maske gebaut. Soweit reicht meine Access Wissen schon, dann hört es aber schon auf. Diese Eingabe ist aber noch Zukunft. Die Datenbank könnte man aber schon her nehmen. Momentan muss die Person die die Blätter überträgt es noch so schnell und so einfach wie möglich haben. Und da ist eine Eingabemaske nicht hilfreich. Daher auch der Gedanke die Daten in Excell zu schreiben und diese per VBA in die Accessdatenbank zu schreiben. Und natürlich damit die Excelltabelle nicht groß wird die alten Daten wieder zu löschen. Ich kann die Datenbank und die Eingabe Datei gern mal zuschicken. Im Grunde ist die Datenbank in Access das Spiegelbild der Eingabedatei nur ohne Berechnung. Grüße Thomas Soll ich einen Eigenen Thread erstellen oder kann man das ganze irgendwie verschieben.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 14. Jul. 2017 11:31 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Verschieben von Teilthreads geht technisch nicht. Bitte selber einen neuen Beitrag erstellen, link auf diesen hier nicht vergessen oder zusammenfassen, was bisher geschah. Sei mir nicht böse, aber IMHO übersteigt Deine Anfrage den Rahmen einer Forenhilfe. Für solche Aufgaben legt man woanders Geld auf den Tisch, hat es aber danach auch so, wie man's gern hätte UND es funktioniert Wenn Du Dich jedoch selbst ertüchtigen möchtest, gerne selber anfangen, in erreichbaren Schritten weitermachen und dabei hier im Forum möglichst konkrete Fragen stellen. Viel Erfolg! ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bruderlori Mitglied
Beiträge: 11 Registriert: 13.07.2017 Office 2013 Win10 prof.
|
erstellt am: 14. Jul. 2017 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Danke für den Hinweis. Zu meinem Projekt Ja da bin ich bei dir. Kann man alles schon fertig kaufen. Wahrscheinlich sogar viel komfortabler als ich es je bauen kann. Wenn du das jetzt noch meinem Chef verkaufen kannst. Mir ist das leider nicht gelungen. Zu meiner Frage Siehe weiter oben habe ich meine Frage gestellt. Ich möchte nicht das mir jemand eine Datenbank mit Eingabe baut sondern einen vba Code gibt den ich auf mein Vorhaben anpassen kann. Das entspricht wohl doch dem Sinn diesen Forums Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Technischer Produktdesigner Munitionsentwicklung Future Gun System (m/w/d) | - Unterstützung im Rahmen von Konstruktionsarbeiten bei Neuentwicklungen
- Erstellung von 3D-Modellen sowie den Aufbau komplexer Baugruppen im CAD
- Zeichnungsableitungen und Erstellung von norm- und fertigungsgerechten Konstruktionszeichnungssätzen inkl. Stücklisten
- Neuaufbau alter Zeichnungssätze nach vorgegebenen Richtlinien
- Überprüfung ...
| Anzeige ansehen | Produktdesign, Industriedesign |
|
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 MS-Office 365 ProPlus x86 WIN7(x64)
|
erstellt am: 14. Jul. 2017 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für Sebke
Moin, es wird Dich niemand daran hindern, Fragen (die den Forenregeln entsprechen und das tut Deine Frage bislang, kein Problem an dieser Stelle) zu stellen Wenn Du sie hübsch aufbereitest, also eine klar gegliederte Aufgabenstellung (keine Salamitaktik ), Beispieldateien zur vorliegenden Datenstruktur, Wunschergebnis, bisher selber erarbeitete Zwischenergebisse/Fortschritte in einem neuen, eigenen thread einstellst, finden sich vielleicht user, es mit Dir gemeinsam erarbeiten möchten Einige hier geben lieber Hilfe zur Selbsthilfe. Chefs überzeugen ist eine Kunst für sich, wenn Arbeitszeit keine Rolle spielt. KlaK hat es oben bereits angedeutet, Excel wird gern für alles Mögliche mißbraucht. Klappt auch oft, jedoch sollte man sich bei solchen Unternehmungen günstigerweise vorher klar darüber sein, wohin die Reise gehen soll und idealerweise schon das ein oder andere Tutorial/Hilfethema durchblätert haben. Wie gesagt, stell Deine Frage helferfreundlich aufbereitet neu ein und schau, was rum kommt Viel Erfolg! (Ich würde dann hier auch gern heute Abend schließen wollen) Mit Bruderlori und seinem Thema >> Daten beim Speichern in Datenbank schreiben << geht's nebenan weiter. Hier im thread bleibt's beim Thema VBA Tabelle kopieren von Zeile bis Zeile. ------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |