Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1584to1588
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

Kopierschleife

Kopierschleife
10.10.2017 10:53:58
Norbert
Ich habe eine Excel-Arbeitsworkbook vorliegen mit 20 Worksheets. Im Worksheet Nummer 3 stehen in der Spalte G Namen und in der Spalte J Werte. Der Aufbau der Worksheets ist von Worksheet 3 bis Worksheet 15 identisch. Nun möchte ich überprüfen, bis zu welcher Zeile in G ein Inhalt enthalten ist und bis zu dieser Zeilennummer die Werte aus J Kopieren und an selbiger Stelle fortlaufend in die Worksheets 4 bis 15 einfügen. Also J10 in Worksheet 3 zu J10 in Worksheet 4, Worksheet 5 usw.
Beispiel:
G10 Max Mustermann ........................ J10 555
G11 Petra Musterfrau ........................ J11 777
G12 Herr Basic ........................ J12 999
G13 Frau Excel ........................ J13 333
Folglich sollen die Werte – in diesem Beispiel – “555”, “777”, “999“ und „333“ kopiert und an selbiger stelle in die folgenden 11 Worksheets (Worksheet 4 bis 15) eingefügt werden.
Weiß jemand, wie man diese Ablauflogik mit einer Schleife realisieren kann?
Derzeit weise ich die zu kopierenden Werte mit einer „Copy_To Destination:=“ an die entsprechende Stelle zu. Dies ist jedoch sehr ineffizient, da es in meinem obigen Beispiel „nur“ viert Werte (da vier Namen in G) sind, jedoch es durchaus auch 50 oder mehr Namen in G und damit verbundene Werte in J sein können.
Ich habe mir schon meine Gedanken gemacht, doch weiß nicht, wie ich den Kopiervorgang programmieren soll:
Sub KopierBefehl()
Dim i As Integer
i = 1
Do While Not Cells(G7) = "" ‘Überprüft bis in welche Zeile in G ein Name Steht
j = Sheets.Count
For i = 4 To 15 ‘Legt die Worksheets für die Kopien fest
‘ Hier müsste die Kopieranweisung rein, also: J10 zu J10 in Worksheet 4, zu Worksheet 5, zu Worksheet 6 usw.
Next i
Ich hoffe, dass jemand Rat weiß.
Vielen Dank!
Beste Grüße,
Norbert

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopierschleife
10.10.2017 11:18:11
Michael
Hallo!
Meinst Du so?
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets(3)
Dim c As Range, i&
With WsQ
For Each c In .Range("J1:J" & .Cells(.Rows.Count, "J").End(xlUp).Row)
For i = 4 To 15
Wb.Worksheets(i).Cells(c.Row, c.Column) = c.Value
Next i
Next c
End With
Set Wb = Nothing: Set WsQ = Nothing: Set c = Nothing
End Sub
LG
Michael
AW: Kopierschleife
10.10.2017 12:30:09
Norbert
Hallo Michael,
erst einmal vielen Dank für die schnelle Hilfe, das Makro funktioniert super!
Dennoch habe ich noch einen Anpassungswunsch, den ich alleine nicht hinbekomme:
Wenn ich beispielsweise 10 Werte habe, kopiert das Makro genau 10 Werte in die kommenden Worksheets, was auch so sein soll. Leider füllt es anscheinend die übrigen Zellen (ab 11 bis zur letzen Zelle) in der Spalte (welche nicht gebraucht werden) mit 0 auf. Damit überschreibt das Makro leider alle meine Formeln.
Kann man es irgendwie anpassen, dass es eben nur die Werte kopiert und wenn es nichts zum kopieren gibt einfach abbricht und nichts mehr unternimmt?
Tausend Dank!
Viele Grüße,
Norbert
Anzeige
AW: Kopierschleife
10.10.2017 12:40:07
Rudi
Hallo,
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets(3)
Dim c As Range, i&
With WsQ
For Each c In .Range("G1:G" & .Cells(.Rows.Count, "J").End(xlUp).Row)
For i = 4 To 15
Wb.Worksheets(i).Cells(c.Row, c.Column+3) = c.OffSet(,3).Value
Next i
Next c
End With
Set Wb = Nothing: Set WsQ = Nothing: Set c = Nothing
End Sub
Gruß
Rudi
AW: Kopierschleife ; Korrektur
10.10.2017 12:40:46
Rudi
Hallo,
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets(3)
Dim c As Range, i&
With WsQ
For Each c In .Range("G1:G" & .Cells(.Rows.Count, "G").End(xlUp).Row)
For i = 4 To 15
Wb.Worksheets(i).Cells(c.Row, c.Column+3) = c.OffSet(,3).Value
Next i
Next c
End With
Set Wb = Nothing: Set WsQ = Nothing: Set c = Nothing
End Sub
Gruß
Rudi
Anzeige
AW: Kopierschleife ; Korrektur
11.10.2017 09:12:29
Norbert
Hallo Rudi,
ich kann ehrlich gesagt keinen Unterschied zu dem Code von Michael in Deinem erkennen?
Hast Du evtl. etwas falsch kopiert?
Ich habe weiterhin das Problem, dass das Makro die nicht mit Werten versehenen Zeilen mit 0 auffüllt.
Beste Grüße,
Norbert
Stochern im Nebel
11.10.2017 09:58:36
Michael
Hallo Norbert!
dass das Makro die nicht mit Werten versehenen Zeilen mit 0 auffüllt
Ist der Ziel-Bereich nicht gleich groß wie der Quell-Bereich?
Ist wohl an der Zeit, dass Du anhand eines Beispiels Deine beiden Bereiche (Quelle und Ziel) aufzeigst.
LG
Michael
AW: Stochern im Nebel
11.10.2017 10:06:51
Norbert
Hallo Michael,
doch ist es mit 146 Zeilen. Diese müssen aber nicht zwingend alle Zeilen aufgefüllt sein, es kann sein, das beispielsweise nur 6 Namen vorhanden sind und somit 6 Werte kopiert werden sollen. Die übrigen 140 Zellen sollen aber nicht mit nullen aufgefüllt werden.
Entschuldige, wenn das in meiner Problembeschreibung nicht komplett verständlich war.
Beste Grüße,
Norbert
Anzeige
Unvollständige Problembeschreibungen
11.10.2017 10:55:36
Michael
Norbert,
...führen erfahrungsgemäß zu unpassenden Lösungen.
Lade bitte eine Beispielmappe hoch, in der erkennbar ist, was wie kopiert werden soll; es reichte eine Quell- und Zieltabelle (statt 11 Zieltabellen).
Wir schreiben hier nicht gerne Codes, die dann kein Mensch brauchen kann, und haben unsere Zeit nicht gestohlen, weißt Du?!
LG
Michael
auch vereinzelte Namen?
11.10.2017 11:19:15
KlausF
Hallo Norbert,
das beispielsweise nur 6 Namen vorhanden sind
Kann es sein, dass die Namen in Spalte G auch vereinzelt stehen,
also nicht zusammenhängend?
Gruß
Klaus
G statt J ?
11.10.2017 11:45:59
KlausF
Hi,
ändere mal das erste Makro von Michael in der For-Zeile von J auf G:
For Each c In .Range("J1:J" & .Cells(.Rows.Count, "G").End(xlUp).Row)
War wahrscheinlich wohl nur der Flüchtigkeitsfehler, oder?
Gruß
Klaus
Anzeige
AW: Stochern im Nebel
11.10.2017 13:55:53
Norbert
Hallo,
ich habe mal ein Workbook erstellt, welches genau so wie das Workbook aussieht, in welchem das Makro implementiert werden soll.
Aus jeder Monatsspalte in Worksheet 3 sollen die Werte Analog in die folgenden Worksheets übertragen werden. Also Inhalt aus J2:6 aus Worksheet Januar, nach J2:6 in Worksheet Februar, März, April usw.
Die freien Zellen in der entsprechenden Spalte (in dem keine Werte mehr drunterstehen) sollen aber nicht mit 0 aufgefüllt werden, da hier Formeln hinterliegen.
Zusammengefasst: Zu kopierende Spalten J, L, N, P, R, T, V, X, Z, AB, AD an die entsprechende Stelle in den folgenden Worksheets.
Ich hatte in meinem ersten Beitrag nur eine Spalte genannt, da ich dachte, ich könnte es selbst anpassen. Habe ich doch leider auch nicht geschafft..
Mappe:
https://www.herber.de/bbs/user/116874.xlsx
Grüße,
Norbert
Anzeige
Warum nicht gleich mit Bsp-Mappe
11.10.2017 14:30:33
Michael
Norbert?
Denn so haben wir nicht nur tlw. sinnlos Code geschrieben, sondern es stellt sich heraus, dass Du auch noch ganz andere Anforderungen hast, als ursprünglich gepostet.
Hier der neue Code, basierend auf Deiner Bsp-Datei. Beachte: In Deiner Bsp-Datei hat das Tabellenblatt für "Oktober" gefehlt (und der "November" war falsch geschrieben, ist aber hier nicht hinderlich):
Sub a()
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim WsQ As Worksheet: Set WsQ = Wb.Worksheets("Januar")
Dim i&, j&, lR&, c
Application.ScreenUpdating = False
c = Array("J", "L", "N", "P", "R", "T", "V", "X", "Z", "AB", "AD")
With WsQ
lR = .Cells(.Rows.Count, "G").End(xlUp).Row
For i = LBound(c) To UBound(c)
.Range(.Cells(2, c(i)), .Cells(lR, c(i))).Copy
For j = 4 To 14
With Wb.Worksheets(j)
.Cells(2, c(i)).PasteSpecial xlPasteValues
End With
Next j
Next i
End With
Set Wb = Nothing: Set WsQ = Nothing: Erase c
End Sub
Passt?
LG
Michael
Anzeige
AW: Warum nicht gleich mit Bsp-Mappe
11.10.2017 15:07:24
Norbert
Hallo Michael,
ich wollte es entsprechend für die anderen Zellen ausweiten, da ich nicht wusste, ob das gesamte Makro nicht evtl. etwas zu viel verlangt ist :-)
Es kopiert einwandfrei, jedoch werden weiterhin die Zellen, welche keinen Wert enthalten, mit einer 0 befüllt. Also in meiner Beispielmappe wird aber der Zeile 7 (wo keine Werte zum kopieren mehr vorhanden sind) eine 0 jeweils eingefügt in die folgemonate. Kannst Du dir erklären, wieso das so ist? Gibt es eine Möglichkeit, das zu verhindern?
Tausend Dank!
Beste Grüße,
Norbert
Nicht anhand Deiner Beispiel-Mappe
11.10.2017 15:11:46
Michael
Norbert,
...denn mein Code fügt definitiv nirgends eine "0" (willkürlich)ein.
Es muss folglich am Aufbau Deiner Originalmappe (Zellformeln, evtl. Datentabelle?...) liegen, der offenbar von dem der Beispieldatei divergiert.
Ich bin raus.
LG
Michael
Anzeige
AW: Nicht anhand Deiner Beispiel-Mappe
11.10.2017 15:39:47
Norbert
Hallo Michael,
hmmm, tatsächlich stehen statt der Formeln - wenn ich in eine leere Zelle anklicke - dort eine 0 anstatt der ursprünglichen Formel. Die nullen sind nicht in der Zelle sichtbar sondern werden oben in der Leiste bei Klick angezeigt. Daher lag es für mich nahe, dass dies passiert, während dein Makro die Spalten durchläuft. Ich schaue noch mal woran das liegen kann.
Du hast mir auf jeden Fall sehr geholfen. Die gewünschten Werte kopieren tut es einwandfrei. Besten Dank!
Beste Grüße,
Norbert

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige