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

Kopieren von Zellbereich mithilfe einer Beding.

Kopieren von Zellbereich mithilfe einer Beding.
24.09.2018 18:21:36
Zellbereich
Hallo zusammen,
ich habe hier einen etwas komplexen Fall wie ich finden.
Und zwar möchte ich mir eine Liste aus verschiedenen Zellbereich zusammenkopieren. Abhängig von einer Matrix soll entschieden werden, welcher jeweilige Zellbereich in die Liste kopiert werden soll. Die Matrix besteht aus einer Liste in der entweder nichts oder eine 1 drinnen steht. Die Matrix hat eine Größe von 12 Zeilen und 100 Spalten. Es ist in dem Fall erforderlich, dass das Makro die Spalten von oben nach unten und von recht nach links abarbeitet. Sprich erst A1, A2, A3... A12, B1, B2... B12.. usw. Wenn nun in einer der Zellen eine 1 steht, soll aus einem anderen Tabellenblatt ein definierter Zellbereich (A1:C8) in die Liste kopiert werden. Die einfügen soll immer unterhalb erfolgen. Demzufolge kann ist die Gesamtanzahl der Zeilen abhängig von der Matrx. Die Liste soll nach Möglichkeit auch in einem eigenen Tabellenblatt geführt werden.
Ich hoffe irgendjemand kann mir folgen und vielleicht etwas unterstützen.
Grüße und Danke

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
24.09.2018 20:03:18
Zellbereich
Hallo Tobias,
Eine Musterdatei, wo man auch noch sehen könnte, wie es später aussehen soll, wäre hilfreicher als 1000 Worte.
Gruß
Onur
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 05:41:59
Zellbereich
warum soll der Bereich A1:C8 maximal 12.000 mal kopiert werden?

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 09:34:56
Zellbereich
Schönen Guten Morgen,
habe jetzt mal eine Musterdatei hochgeladen.
Es sieht folgendermaßen aus. Im Tabellenblatt "Zyklendefinition" befindet sich die Matrix, bestehend aus Einsen. Ich möchte mit dem Makro einen s.g. Gesamtzyklus generieren. Ein Zyklus besteht dabei aus mehreren Betriebspunkten (BP_01-12). Ab einer gewissen Zykluszahlen fallen jedoch ein paar Betriebspunkte weg (sobald in einer Zelle keine Eins eingetrage ist, fällt der BP weg). In dem Beispiel ab Zyklus Nr. 09. Am Ende werden es natürlich deutlich mehr Zyklen werden.
Das Makro sollte nun, beginnend in Zelle B3, prüfen ob einen Eins eingetragen ist oder nicht. Wenn bespielsweise in B3 eine Eins steht, soll aus dem Tabellenblatt "Betriebspunktdefinition" der entsprechende Zellebereich in das Tabellenblatt "Gesamtzyklus" kopiert werden. Im Tabellenblatt "Betriebspunktdefinitionen" gibt es für jeden BP einen Zellbereich BP_01-12. Wenn nun in der Matrix bei BP_11 einen 1 steht, soll der Zellbereich A53:G56 kopiert werden.
Dabei ist es entscheidend, dass das Makro Spalte für Spalte und von oben nach unten abfragt. Zudem ist es erforderlich, dass die kopierten Zellbereich im Tabellenblatt "Gesamtzyklus" nach unten hin verlaufend eingefügt werden. Also nicht überschreiben, sondern nach unten aneinanderreihen.
Ich hoffe mit diesem Beispiel wird das ganze etwas klarer.
Vielen Dank schon mal bei der Hilfe.
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 09:35:56
Zellbereich
Schönen Guten Morgen,
habe jetzt mal eine Musterdatei hochgeladen.
Es sieht folgendermaßen aus. Im Tabellenblatt "Zyklendefinition" befindet sich die Matrix, bestehend aus Einsen. Ich möchte mit dem Makro einen s.g. Gesamtzyklus generieren. Ein Zyklus besteht dabei aus mehreren Betriebspunkten (BP_01-12). Ab einer gewissen Zykluszahlen fallen jedoch ein paar Betriebspunkte weg (sobald in einer Zelle keine Eins eingetrage ist, fällt der BP weg). In dem Beispiel ab Zyklus Nr. 09. Am Ende werden es natürlich deutlich mehr Zyklen werden.
Das Makro sollte nun, beginnend in Zelle B3, prüfen ob einen Eins eingetragen ist oder nicht. Wenn bespielsweise in B3 eine Eins steht, soll aus dem Tabellenblatt "Betriebspunktdefinition" der entsprechende Zellebereich in das Tabellenblatt "Gesamtzyklus" kopiert werden. Im Tabellenblatt "Betriebspunktdefinitionen" gibt es für jeden BP einen Zellbereich BP_01-12. Wenn nun in der Matrix bei BP_11 einen 1 steht, soll der Zellbereich A53:G56 kopiert werden.
Dabei ist es entscheidend, dass das Makro Spalte für Spalte und von oben nach unten abfragt. Zudem ist es erforderlich, dass die kopierten Zellbereich im Tabellenblatt "Gesamtzyklus" nach unten hin verlaufend eingefügt werden. Also nicht überschreiben, sondern nach unten aneinanderreihen.
Ich hoffe mit diesem Beispiel wird das ganze etwas klarer.
Vielen Dank schon mal bei der Hilfe.
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 09:36:09
Zellbereich
Schönen Guten Morgen,
habe jetzt mal eine Musterdatei hochgeladen.
Es sieht folgendermaßen aus. Im Tabellenblatt "Zyklendefinition" befindet sich die Matrix, bestehend aus Einsen. Ich möchte mit dem Makro einen s.g. Gesamtzyklus generieren. Ein Zyklus besteht dabei aus mehreren Betriebspunkten (BP_01-12). Ab einer gewissen Zykluszahlen fallen jedoch ein paar Betriebspunkte weg (sobald in einer Zelle keine Eins eingetrage ist, fällt der BP weg). In dem Beispiel ab Zyklus Nr. 09. Am Ende werden es natürlich deutlich mehr Zyklen werden.
Das Makro sollte nun, beginnend in Zelle B3, prüfen ob einen Eins eingetragen ist oder nicht. Wenn bespielsweise in B3 eine Eins steht, soll aus dem Tabellenblatt "Betriebspunktdefinition" der entsprechende Zellebereich in das Tabellenblatt "Gesamtzyklus" kopiert werden. Im Tabellenblatt "Betriebspunktdefinitionen" gibt es für jeden BP einen Zellbereich BP_01-12. Wenn nun in der Matrix bei BP_11 einen 1 steht, soll der Zellbereich A53:G56 kopiert werden.
Dabei ist es entscheidend, dass das Makro Spalte für Spalte und von oben nach unten abfragt. Zudem ist es erforderlich, dass die kopierten Zellbereich im Tabellenblatt "Gesamtzyklus" nach unten hin verlaufend eingefügt werden. Also nicht überschreiben, sondern nach unten aneinanderreihen.
Ich hoffe mit diesem Beispiel wird das ganze etwas klarer.
Vielen Dank schon mal bei der Hilfe.
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 12:58:42
Zellbereich
Hallo Tobias,
teste mal:
Option Explicit
Public Sub Betriebspunkte()
Dim i As Long, z As Long, y As Long, loLetzteQ As Long
Dim loLetzteZ As Long, wsZiel As Worksheet
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
Set wsZiel = ThisWorkbook.Worksheets("Gesamtzyklus")
With Worksheets("Betriebspunktdefinition")
loLetzteQ = .Cells(.Rows.Count, 1).End(xlUp).Row - 3
End With
With Worksheets("Zyklendefinition")
For i = 2 To 101
y = 0
With .Columns(1)
For z = 3 To 14
For y = 3 To loLetzteQ Step 5
If .Cells(z, i) = 1 Then
With Worksheets("Betriebspunktdefinition")
loLetzteZ = wsZiel.Cells(wsZiel.Rows.Count, 1) _
.End(xlUp).Offset(1).Row
If wsZiel.Cells(1, 1) = "" Then loLetzteZ = 1
.Range(.Cells(y, 1), .Cells(y + 3, 7)).Copy _
wsZiel.Cells(loLetzteZ, 1)
End With
Else
z = z + 1
End If
Next y
Next z
End With
Next i
End With
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Läuft halt einige Zeit, weil Schleifen und eine vielzahl von Kopiervorgängen.
Gruß Werner
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 14:08:52
Zellbereich
Zunächst mal danke für die schnelle Antwort Werner!
Ich bekommen leider beim Ausführen die Fehlermeldung:
Laufzeitfehler '9':
Index außerhalb des gültigen Bereichs
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 14:24:32
Zellbereich
Hallo Tobias,
der Name deines Blattes Betriebspunktdefinition ist falsch geschrieben.
Du hast Betriebspunktdefiniton als Blattname, da fehlt ein i
Ändere mal den Blattnamen in die korrekte schreibweise: Betriebspunktdeninition.
Im Code wird das Blatt Betriebspunktdefinition angesprochen und das gibt es nicht, weil bei dir im Blattnamen das i fehlt, deshalb Index-Fehler.
Das hatte ich bei deiner Beispielmappe gemacht.
Gruß Werner
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 14:21:51
Zellbereich
Scheinbar war hat sich ein Schreibfehler eingeschlichen. Berechnung läuft noch. Wie lange hat das bei dir gedauert?
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 14:26:07
Zellbereich
Hallo Tobias,
mit der Beispielmappe ca. 7 Sekunden. Ich habe ja keine Ahnung von welchem Umfang wir bei deiner Arbeitsdatei sprechen.
Gruß Werner
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 14:32:54
Zellbereich
Ok, also mit Korrektur des Tabellenblattnamen läuft die Berechung zumindest durch. Allerdings nicht korrekt.
Hab der Einheit halber die Matrix deutlich verkleinert. Genau genommen habe ich nur einen Zyklus befüllt. Und dabei nur die Betriebspunkte BP_02-05.
Im Tabellenblatt "Gesamtzyklen" wird dann korrekterweise mit dem BP_02 begonnen. Allerdings endet es nicht bei BP_05, sondern erstellt im Endeffekt 5 Zyklen. Eigentlich sollte bei meiner akt. Matrix aber nur die Bereich aus BP_02 bis BP_05 jeweils einmal kopiert werden. Sie's dir bei Gelegenheit einfach selbst im nachfolgenden Beispiel an.
Grüße und Dank
Tobi
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 14:56:46
Zellbereich
Hallo Tobias,
mein Fehler.
Hier muss vor End With noch ein z = z + 1 rein.
With Worksheets("Betriebspunktdefiniton")
loLetzteZ = wsZiel.Cells(wsZiel.Rows.Count, 1) _
.End(xlUp).Offset(1).Row
If wsZiel.Cells(1, 1) = "" Then loLetzteZ = 1
.Range(.Cells(y, 1), .Cells(y + 3, 7)).Copy _
wsZiel.Cells(loLetzteZ, 1)
z = z + 1
End With
Gruß Werner
Gruß Werner
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 16:29:54
Zellbereich
Klasse, funktioniert! Habe bislang keinen Fehler gefunden.
Jetzt hätte ich allerdings noch einen kleine Frage. Wo muss ich im Code was ändern, so dass ich die Zeilenanzahl der jeweiligen Betriebspunkte variieren kann? Sprich nicht 4 Zeilen pro Betriebspunkt, sondern meinetwegen 5 oder 6. Das hab ich bislang noch nicht rausbekommen.
Grüße und nochmals danke!
Anzeige
AW: Kopieren von Zellbereich mithilfe einer Beding.
25.09.2018 18:03:38
Zellbereich
Hallo Tobias,
dann müssten diese Zeilen angepasst werden:
loLetzteQ = .Cells(.Rows.Count, 1).End(xlUp).Row - 3
For y = 3 To loLetzteQ Step 5
.Range(.Cells(y, 1), .Cells(y + 3, 7)).Copy
Das würde ich dann so händeln, dass beim Makrostart abgefragt wird, wieviele Zeilen jeder Betriebspunkt hat.
Option Explicit
Public Sub Betriebspunkte()
Dim i As Long, z As Long, y As Long, loLetzteQ As Long
Dim loLetzteZ As Long, loAnzahl As Long, wsZiel As Worksheet
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
loAnzahl = Application.InputBox("Wieviele Zeilen hat jeder Betriebspunkt?", _
"Zeilenzahl pro Betriebspunkt", , , , , , 1) - 1
If loAnzahl > 0 Then
Set wsZiel = ThisWorkbook.Worksheets("Gesamtzyklus")
With Worksheets("Betriebspunktdefinition")
loLetzteQ = .Cells(.Rows.Count, 1).End(xlUp).Row - loAnzahl
End With
With Worksheets("Zyklendefinition")
For i = 2 To 101
y = 0
With .Columns(1)
For z = 3 To 14
For y = 3 To loLetzteQ Step loAnzahl + 2
If .Cells(z, i) = 1 Then
With Worksheets("Betriebspunktdefinition")
loLetzteZ = wsZiel.Cells(wsZiel.Rows.Count, 1) _
.End(xlUp).Offset(1).Row
If wsZiel.Cells(1, 1) = "" Then loLetzteZ = 1
.Range(.Cells(y, 1), .Cells(y + loAnzahl, 7)).Copy _
wsZiel.Cells(loLetzteZ, 1)
z = z + 1
End With
Else
z = z + 1
End If
Next y
Next z
End With
Next i
End With
End If
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Aber eines ist hoffentlich klar. Das kann nur funktionieren, wenn alle Betriebspunkte die gleiche Anzahl an Zeilen haben.
Gruß Werner
Anzeige
Für eine weitere Frage....
28.09.2018 08:11:20
Werner
Hallo Tobias,
...hat es noch gereicht, für eine Rückantwort wohl nicht mehr?
Gruß Werner
AW: Für eine weitere Frage....
02.10.2018 08:43:56
Tobias
Hallo Werner,
tut mir Leid für die späte Nachricht. Lag die letzten Tag komplett flach!
Also das Makro erfüllt mittlerweile meine Anforderungen und funktioniert auch recht zügig. Passt soweit! Für künftige Anwendungen wäre es allerdings praktisch, wenn ich die max. Zeilanzahl nicht mehr manuell eingeben muss, sondern das vom Makro ausgelesen wird. Hintergrund ist, dass sich die Zeilanzahl auch mal vergrößeren kann. Soweit ja kein Problem. Allerdings muss ich dann bei allen anderen Betriebspunkten einen entsprechende Zeile hinzufügen, damit es funktioniert.
Das einzige was mir in deinem Code nicht so ganz klar ist, ist folgender Teil:
With Worksheets("Betriebspunktdefinition")
loLetzteQ = .Cells(.Rows.Count, 1).End(xlUp).Row - loAnzahl
Warum ziehst du am Ende noch mal loAnzahl ab?
Viele Grüße
Tobias
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige