Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte zeilenweise kopieren und Ergebnis zurück schreiben

Forumthread: Werte zeilenweise kopieren und Ergebnis zurück schreiben

Werte zeilenweise kopieren und Ergebnis zurück schreiben
15.05.2024 16:15:12
Mario
Hallo zusammen,

vorweg: was das ganze Thema VBA angeht bin ich mehr oder weniger ein unbeschriebenes Blatt, von der Nutzung des Recorders und ein paar Modifikationen am dadurch entstehenden Code einmal abgesehen. Ich hoffe trotzdem, dass Ihr mir ein wenig weiter helfen könnt.

Folgende Herausforderung:

Ich hab in Tabellenblatt 1 drei Spalten (A, B, und C) mit Daten (Länge/Breite/Höhe). Insgesamt >60.000 Datensätze. Ich möchte nun die ersten 3 Zahlen A1, B1 und C1 kopieren und auf Tabellenblatt 2 in die Zellen A1, B1 und C1 als Werte einfügen. Daraufhin erscheint in Zelle D1 das Ergebnis einer recht komplexen Berechnung (die sich mit Hilfe von VBA sicher eleganter lösen lässt, als ich es derzeit tue - aber das soll hier nicht Gegenstand sein). Dieses Ergebnis soll nun wiederum als Wert neben meine Ursprungsdaten in Tabellenblatt 1 Zelle D1 geschrieben werden. Das Ganze dann Zeile für Zeile wobei die Zielzellen (A1, B1, C1) sowie die Quellzelle (D1) auf Blatt 2 natürlich immer gleich bleiben.

Ich hoffe es wird einigermaßen klar, was ich erreichen möchte und es hat jemand eine Idee, wie man das lösen könnte.

Besten Dank schon mal.
Mario

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Werte zeilenweise kopieren und Ergebnis zurück schreiben
15.05.2024 16:38:39
chagbox
Hallo Mario

Als Beispielberechnung wird hier in Spalte D die Summe aller Zahlen berechnet, das musst Du noch anpassen. Gruss Henner



Sub CopyData()
Dim L, L_LRow As Long
Dim wksS, wksT As Worksheet
Set wksS = ThisWorkbook.Sheets("Tabelle1")
Set wksT = ThisWorkbook.Sheets("Tabelle2")
On Error Resume Next
L_LRow = wksS.Cells(Rows.Count, 1).End(xlUp).Row
For L = 1 To L_LRow Step 1
'Copy Row Source => Target
wksT.Range(wksT.Cells(L, 1), wksT.Cells(L, 3)).Value = wksS.Range(wksS.Cells(L, 1), wksS.Cells(L, 3)).Value
'Recht komplexe Berechnung
wksT.Cells(L, 4).Value = Application.Sum(wksS.Range(wksS.Cells(L, 1), wksS.Cells(L, 3)).Value)
'Copy Result Target => Source
wksS.Cells(L, 4).Value = wksT.Cells(L, 4).Value
Next L
Set wksS = Nothing
Set wksT = Nothing
End Sub
Anzeige
AW: Werte zeilenweise kopieren und Ergebnis zurück schreiben
16.05.2024 15:30:27
daniel
Hi
wie sicherlich schon geschrieben wurde:
das Problem ist, dass jedes Ändern eines Zellwertes in Excel ein zeitaufwendiger Prozess ist, weil Excel dann einige Aufgaben im Hintergrund zu erledigen hat.
Dabei ist es allerdings so, dass Excel diese Aufgaben "gebündelt" durchführen kann , dh Range("A1:A60000").value = 1 dauert nur unwesentlich länger als Range("A1").Value = 1
Daher sollte man, wenn man viele Zeilen hat, immer versuchen die Zugriffe auf Excelzellen nicht einzeln, sondern mit möglichst großen Zellbereichen durchzuführen.

die entscheidende Frage ist:
Findet die Berechnung auschließlich in der Zelle D1 statt oder gibt es noch weitere Zellen mit Formeln die von Länge/Breite/Höhe abhängig sind und die Einfluss auf das Ergebnis haben?
wenn die Berechnung ausschließlich in D1 stattfindet, wäre eine Möglichkeit, die Formel aus D1 hinter die Spalten mit den Werte zu kopieren und dann das Ergebnis durch die Werte zu ersetzen.

ansonsten müsste man versuchen, die Berechnung vollständig in VBA abzubilden.
dann könnte man die L/B/H-Werte in ein Array einlesen, damit die Ergebnisse innerhalb von VBA berechnen und dann alle Ergebnisse in einem Schritt in die Zellen zurückschreiben.

wie du siehst, so ganz allgemein wirds schwierg, man müsste schon konkreter werden.

kanns du mal eine Beispieldatei mit ein paar Daten zeigen (es müssen nicht 60.000 sein, ein paar reichen)

Gruß Daniel
Anzeige
AW: Werte zeilenweise kopieren und Ergebnis zurück schreiben
17.05.2024 08:40:32
Mario
Guten Morgen ihr beiden,

Vorweg: das Makro ist nach ca. 5 Stunden erfolgreich durchgelaufen. Zum Glück muss ich das auch nicht regelmäßig machen. Mit dem Ergebnis kann ich so weiterarbeiten. Vielen für die Hilfe!

Eure Erläuterungen und die Tatsache, dass er deutlich schneller gehen würde, wenn die Berechnung in VBA durchgeführt wird, kann ich nachvollziehen bzw. habe ich mir auch schon so gedacht. Tatsächlich ist es wie daniel vermutet: Es ist nicht nur eine Formel, sondern die Werte werden in eine Matrix (nicht im Exel-Formel-Sinn) gezogen, dann finden etliche verschaltete WENN Funktionen statt, gefolgt von einem WVERWEIS und abschließen noch eine MAX-Werte suche.

Ich kann die Aufgabenstellung ja mal kurz erläutern:
Ich habe (wie bereits geschrieben) eine Liste von Artikel mit den Angaben zu L/B/H. Für diese muss ich den kleinstmöglichen Behälter finden, in dem mindestens ein Stück Platz findet. Insgesamt habe ich 5 unterschiedlich große Behälter beginnend mit 60x40x30cm als Größten. Bei den weiteren 4 Typen halbiert sich jeweils die Grundfläche, die Höhe von 30cm bleibt aber konstant. Problem: Ich darf die Artikel drehen und wenden wie ich möchte, die Angegebene Länge kann also auch entsprechend der Höhe in Behälter sein.

Wenn ich euch darüber den Kopf zermartern möchtet, viel Spaß ;) Aber ich wie gesagt kann ich mit dem aktuellem Workaroud auch gut leben.

Beste Grüße
Mario

Anzeige
AW: Werte zeilenweise kopieren und Ergebnis zurück schreiben
16.05.2024 09:20:19
Mario
Moin Henner,

vielen Dank schon mal dafür! Ich konnte das Ganze einigermaßen nachvollziehen. Ich bin aber leider noch nicht ganz da, wo ich hin möchte:

1. Die "recht komplexe Berechnung" ;) findet mittels normaler Exelformel, teilweise mit WVERWEIS etc. statt. Soll heißen, wenn die Werte aus Tabelle 1 in Tabelle 2 kopiert wurden, muss Excel das Ergebnis berechnen, welches dann immer im Zelle D4 der Tabelle 2 erscheint. Meine Frage ist nun, ob ich Zeile mit der Summenbildung im Code einfach löschen kann oder ob dem Code ein kurzer Delay hinzufügen muss, bevor der Ergebnis dann mittel Makro zurück auf Tabelle 1 geschrieben werden kann.

2. Die Werte aus Tabelle 1 müssen immer genau in die Zellen A1, B1 und C1 der Tabelle 2 geschrieben werden (also Tabelle 1, Zeile 1 bis n immer nach Tabelle 2 Zeile 1). Derzeit werden diese in Tabelle 2 auch immer in eine neue Zeile geschrieben, was nicht sein soll.

Schönen Gruß
Mario
Anzeige
AW: Werte zeilenweise kopieren und Ergebnis zurück schreiben
16.05.2024 10:37:52
chagbox
Hallo Mario

Du kannst im Target Sheet einfach das L durch 1 ersetzen (Zeile) und die Berechnungsformel komplett entfernen. Probiere mal ob es nun so passt (Ungetestet). Rückmeldung wäre nett. Gruss Henner




Option Explicit

Sub CopyData()
Dim L, L_LRow As Long
Dim wksS, wksT As Worksheet
Set wksS = ThisWorkbook.Sheets("Tabelle1")
Set wksT = ThisWorkbook.Sheets("Tabelle2")
On Error Resume Next
L_LRow = wksS.Cells(Rows.Count, 1).End(xlUp).Row
For L = 1 To L_LRow Step 1
'Copy Row Source => Target
wksT.Range(wksT.Cells(1, 1), wksT.Cells(1, 3)).Value = wksS.Range(wksS.Cells(L, 1), wksS.Cells(L, 3)).Value
'Copy Result Target => Source
wksS.Cells(L, 4).Value = wksT.Cells(1, 4).Value
Next L
Set wksS = Nothing
Set wksT = Nothing
End Sub
Anzeige
AW: Werte zeilenweise kopieren und Ergebnis zurück schreiben
16.05.2024 14:03:36
Mario
Top, das scheint schon mal funktioniert zu haben. Zumindest in meiner kleinen Testumgebung läuft es 1A durch.

In meinem Hauptdokument mit 60.000 Sätzen und mehr als nur einer einfachen Addition läuft es nun aber bereits seit 3 Stunden. Excel ist aber zumindest noch nicht eingefroren und zeigt immer ganz kurz die Auslastung der Kerne an. Ich bleibe mal geduldig.

Vielen Dank auf jeden Fall!

Mario
Anzeige
AW: Werte zeilenweise kopieren und Ergebnis zurück schreiben
16.05.2024 14:53:27
chagbox
Hallo Mario

3 Stunden ist definitiv zu lang. Du solltest Deine Berechnung in den VBA Code integrieren, so wie in meiner 1. Lösung.
Zeige doch mal bitte Deine Formel. Das hin und her Kopieren entfällt dann auch komplett. Gruss Henner

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige