Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Kopieren mit 2 Bedingungen





Frage

Hallo zusammen, ich habe zwei Mappen, je eine für tägliche und monatliche Zusammenstellungen. In der täglichen werden Daten für in der Regel 24 Gruppen auf einem Blatt untereinander eingetragen. Diese Daten werden dann in die monatliche kopiert. In der monatlichen hat jede Gruppe ein eigenes Blatt und pro Tag eine Zeile. Das kopieren möchte ich nun mit einem Makro durchführen. Das Makro müsste also die Gruppe und das Datum der täglichen Zusammenstellung ermitteln und in die entsprechenden Blätter/Zeilen der monatlichen Mappe kopieren. Erschwerend kommt noch hinzu, dass manchmal noch Untergruppen mit hinzukommen die zur Hauptgruppe addiert werden müssen. Noch einige Details: Tägliche Mappe: Spalte A Datum, Spalte E Gruppen (901-923 und 990 als Hauptgruppen und bei bedarf Hauptgruppe+40 als Untergruppen), Spalten F - P für die Daten. Monatliche Mappe: A5 Gruppe, rest Spalte A Datum, Spalten B - L für die Daten. Vielen Dank schon mal für alle Tips MfG JöKe

Antwort 1 von coros

Hallo Jöke,

ich glaube kaum, dass wenn Du zu einer gleichen Frage einen neuen Thread aufmachst, dass Dir da mehr oder schneller geholfen wird. Benutze doch den alten weiter, der Server wird´s Dir danken.
Dass Du zu Deinem alten Thread keine Antwort bekommen hast, wird daran liegen, das sich keiner den Aufbau usw. Deiner Datei vorstellen kann. Mir geht es jedenfalls so. Auch verstehe ich nicht so ganz, wie das Endresultat aussehen soll. Geht sicherlich auch anderen so. Für solch ein Makro müsste man sicherlich die Datei vor sich haben.

Aber vielleicht kommt ja doch noch jemand mit der rettenden Antwort, ähm rettenden Makro.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von JoeKe

Hi coros,

OK war ne dumme Idee. Aber immerhin weis ich jetzt, dass meine Frage nicht eindeutig ist und deshalb nicht beantwortet wird und nicht nur versunken ist.
Helfen ohne zu sehen ist halt nicht leicht!

Vielen Dank für deine Info!

MfG JöKe

Antwort 3 von JoeKe

Hallo zusammen,

einen letzten Erklärungsversuch:

in Tabelle1 der Mappe1 trage ich in den Spalten F-P Daten ein.
In Spalte E stehen die Namen der Tabellenblätter der Mappe2.
Also E7=901und F7bis P7 die zu 901 gehörenden Daten, E8=902 und F8 bis P8 die zu 902 gehörenden Daten usw. bis Zeile 51.
Das Makro soll die Daten der Spalten F bis P in Mappe2 kopieren. Also Fx bis Px kopieren, Mappe2 öffnen dort jenachdem was in Mappe1,SpalteE steht das entsprechende Tabellenblatt aktivieren und die Werte dort in By bis Ly einfügen.
Zu Mappe1 zurück dort Fx+1 bis Px+1 kopieren und wieder in Mappe2 einfügen usw. bis F51-P51 solange dort Werte stehen.

x und y sind hier Platzhalter keine festen Werte.

Die o.g. Bedingung mit dem Datum habe ich anders gelöst, entfällt also.

Ich hoffe, dass diese Erklärung eindeutiger ist und mir jemand weiter helfen kann.

Vielen Dank
MfG JöKe

Antwort 4 von coros

Moin Jöke,

nachfolgenden Code kopiere in ein StandardModul und weise es einer Befehlssachaltfläche zu.

Sub Kopieren()
Dim Wiederholungen As Integer, Zieldatei As Workbook, _
Zieldateiname As String, Blattname As String
Zieldateiname = "Zieldatei.xls"
For Each Zieldatei In Workbooks
If Zieldatei.Name = Ziedateiname Then
GoTo Weiter:
End If
Next
Workbooks.Open Filename:=Zieldateiname
Weiter:
For Wiederholungen = 1 To 51
On Error Resume Next
Blattname = Cells(Wiederholungen, 5)
Range(Cells(Wiederholungen, 6), Cells(Wiederholungen, 16)).Copy
Workbooks(Zieldateiname).Sheets(Blattname).Cells(1, 77).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next
Workbooks(Zieldateiname).Save
Workbooks(Zieldateiname).Close
End Sub


Der Code öffnet, sofern die Datei nicht bereits geöffnet ist, die Zieldatei. Bedingung ist hierbei, dass die Zieldatei im gleichen Verzeichniss liegen muss wie die Quelldatei. Danach wird mittels einer Schleife die Daten aus der durch die Schleife angesprochenen Zeile Spalte F bis P kopiert und in die neu geöffnete Datei in das Blatt, das den Namen der entsprechenden Zeile in Spalte E hat, ab Zelle BY1 eingefügt. Da Du nicht angegeben hast, in welcher Zeile die Daten eingefügt werden sollen, habe ich mal Zeile 1 genommen. Zum Schluß wird die geöffnete Datei gespeichert und wieder geschlossen.

Da Deine Datei die geöffnet werden soll, sicherlich anders als wie bei mir heißt, musst Du in dem Code in der Zeile

Zieldateiname = "Zieldatei.xls"

den Dateinamen ändern.

Ich hoffe, dass die Lösung schon mal ansatzweise das macht, was Du Dir vorgestellt hast. Bei Fragen oder Problemen melde Dich. Natürlich melde Dich auch, wenn die Lösung voll am Ziel vorbei geschrammt ist.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 5 von JoeKe

Hi Coros,

vielen Dank für dein Lösungsvoschlag. Werde ihn meinen Daten anpassen und mich sobald Ergebnisse vorliegen nocheinmal melden.

MfG JöKe

Antwort 6 von JoeKe

Hi Coros,

leider klappt das kopieren - einfügen nicht.
Nach dem Start läuft das Makro (Eieruhr sichtbar) und die Zieldatei wird geöffnet und wieder geschlossen, aber es wird nichts kopiert und eingefügt. Ich gehe davon aus das deine Lösung im Ansatz richtig ist aber ich es nicht auf meine Bedürfnisse angepasst bekomme.
Das ganze sollte laienhaft ausgedrückt etwa so aussehen:
Kopiere Mappe1,Blatt1,Bereich F7:P7
Öffne Mappe2, Blatt(was in ZelleE7;Mappe1,Blatt1 steht)
füge in die dort aktivierten Zellen ein
gehe zu Mappe1,Blatt1,Bereich F8:P8 und kopiere
gehe zu Mappe2, Blatt(was in Zelle E8, Mappe1, Blatt 1 steht)
füge in die dort aktivierten Zellen ein

usw. bis Bereich F51:P51
Werde mich noch weiter mit deiner Lösung beschäftigen, aber leider bin ich nicht so gut in VBA. Vielleicht kanst du mir noch einen Denkanstoss liefern.

Vielen Dank

JöKe

Antwort 7 von JoeKe

Hi Coros,

hab den Code jetzt direkt in das VBA Projekt der Tabelle aus der die Quelldaten kommen gesetzt und nun geht es.
Den letzten Feinschliff bekomm ich jetzt selber hin.

Vielen Dank für deine Professionelle Hilfe!!

MfG

JöKe

Antwort 8 von coros

Hallo JöKe,

was steht denn nun in der Spalte E? Die Namen der Tabellenblätter oder die Namen der Dateien, die geöffnet werden sollen?
Bei meinem Makro wird eine Datei geöffnet und zwar die mit dem Namen Zieldatei.xls. Diese beinhaltet die Tabellenblätter, deren Namen, z.B. 901, in Spalte E stehen. Das Makro kopiert dann den Bereich F:P und fügt die Daten dann in der Datei "Zieldatei.xls" in Blatt mit dem Namen "901" in Zeile 1 angefangen ab Spalte BY wieder ein. Danach wird die nächste Zeile abgearbeitet. Dort seht in Spalte E z.B. 902. Dannw erden wieder die Daten aus Spalte F:P kopiert und in der Datei "Zieldatei.xls" in Tabellenblatt "902" ab Zelle BY1 eingefügt.

Bitte beantworte mal meine Fragen, und ob das was ich über den Ablauf des Makros geschrieben habe, so ist wie Du es Dir vorgestellt hast. Aus Deinen Erklärungen werde ich nämlich nicht so ganz schlau.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 9 von JoeKe

Hi Coros,

In Spalte E stehen die Tabellenblattnamen der Zieldatei.xls (bei mir Juni). Soweit ist dein Makro i.O. Die bei deinem Makro richtig kopierten Daten werden dann allerdings ab B6 eingefügt (habe ich geändert) hatte mich bei dieser Zeile Workbooks(Zieldateiname).Sheets(Blattname).Cells(1, 77) .PasteSpecial schon gewundert, war aber meine schlechte Erklärung schuld.
Fazit dein Makro funzt nur halt nicht aus einem Standartmodul heraus.
Wenn du nichts dagegen hast, kann ich dir das ganze mal mailen.
Arbeite gerade am nächsten Prob. Bei jedem erneuten ausführen des Makros soll der Zielbereich eine Reihe weiter unten beginnen. Eventuell brauche ich dabei auch nochmal Hilfe. Aber erst "SELBST IST DER MANN".

MfG JöKe

Antwort 10 von JoeKe

Hi Coros,

um die Sache abzuschliesen hier das Makro das Dank deiner Hilfe entstanden ist:


Sub Kopieren()
Dim Wiederholungen As Integer, Zieldatei As Workbook, _
Zieldateiname As String, Blattname As String, i As Integer
Zieldateiname = "Juni TEST.xls"
For Each Zieldatei In Workbooks
If Zieldatei.Name = Zieldateiname Then
GoTo Weiter:
End If
Next
Workbooks.Open Filename:=Zieldateiname
Weiter:
For Wiederholungen = 7 To 51
On Error Resume Next
Blattname = Cells(Wiederholungen, 5)
Range(Cells(Wiederholungen, 6), Cells(Wiederholungen, 16)).Copy
Workbooks(Zieldateiname).Sheets(Blattname).Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next
Workbooks(Zieldateiname).Save
Workbooks(Zieldateiname).Close
End Sub


Wie du siehst habe ich nicht viel geändert. Da du mich trotz meiner schlechten Erklärungen doch richtig verstanden hast.

Es ist halt für den Helfer aber auch für den Frager nicht einfach in Form eines Forums (auch wenn es so ein gutes ist wie SN) alles klar darzustellen.
Bin aber froh wieder mal erfolgreich Hilfe bekommen zu haben und kann die Professionalität der SN´ler nur loben.

MfG JöKe

Antwort 11 von coros

Hi JöKe,

Du hast recht, das war mein Fehler. ich hatte den VBA Code nicht als Makro erstellt, sondsern als CommandButton_Click Ereignis, sprich mit einer Schaltfläche. Ich habe dann daraus einfach nur ein Makro gemacht, ohne es noch mal so auszuprobieren. Da der Code hinter einer Schaltfläche stand und somit ja aus dem Tabellenblatt heraus abgearbeitet wurde, funktioniertte das bei mir, bzw. funktioniert das bei Dir nicht. Wenn man das ganze als Makro macht, muss man auch bei den Werten, die Kopiert werden sollen, den Dateinamen und den Blattnamen mit angeben, damit Excel weiß, von welchem Blatt wohin. Außerdem hat Excel sich da ab und zu etwas kleinlich mit den Range(Cells )-Anweisungen in einem Makro. Ich schreibe Dir noch mal unten das Makro hin, so wie es jetzt bei Dir auch als Makro funktionieren sollte, auch wenn Du es vielleicht nicht mehr so richtig benötigst, da der Code ja bei Dir läuft.

Sub Kopieren()
Dim Wiederholungen As Integer, Zieldatei As Workbook, _
Zieldateiname As String, Blattname As String, i As Integer
Zieldateiname = "Juni TEST.xls"
Quelldateiname = ActiveWorkbook.Name
For Each Zieldatei In Workbooks
If Zieldatei.Name = Zieldateiname Then
GoTo Weiter:
End If
Next
Workbooks.Open Filename:=Zieldateiname
Weiter:
For Wiederholungen = 7 To 51
On Error Resume Next
Blattname = Workbooks(Quelldateiname).Sheets("Tabelle1").Cells(Wiederholungen, 5)
Workbooks(Quelldateiname).Sheets("Tabelle1").Range("F" & Wiederholungen & ":P" & Wiederholungen).Copy
Workbooks(Zieldateiname).Sheets(Blattname).Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).PasteSpecial _
Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next
Workbooks(Zieldateiname).Save
Workbooks(Zieldateiname).Close
End Sub 


Danke Dir trotzdem für Deine nette Rückmeldung.

MfG,
coros
Jeder macht was er will, keiner macht was er soll, aber alle machen mit.

Antwort 12 von JoeKe

Hi Coros,

deine Verbesserung kann ich doch noch gut für meinen Feinschliff brauchen.
Außerdem zeigt es mir das ich in VBA noch ne Menge lernen muss/kann.

MfG JöKe

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: