VBA - Zelleninhalte aus Quelltabelle in Zieltabellen kopieren
#1
Hallo lieber Helfer,

Habe ein Problem und komme mit meinen "Programmierkünsten" nicht mehr weiter.

Ich habe eine Quelltabelle ("Measures") und mehrere Zieltabellen (zb. "ZDR004-...."). Aus der Quelltabelle soll in die Zieltabellen kopiert werden. Und zwar so, dass wenn in Spalte "G" die ersten 12 Zeichen identisch mit dem Namen des Tabellenblattes ist. Also wenn in Spalte G zb. "ZDR004-18-59 New Impeller" steht, dann die Zeile in das Tabellenblatt "ZDR004-18-59" kopieren.
Zudem benötige ich noch:  wenn die Zeilen sich dann kopieren, dass sobald "Milestones" in Spalte F in "Measures" steht, die ersten 7 Zeichen der Spalte "B" in die Spalte "AA" in die Zieltabelle kopiert.

Ich hoffe, dass ist klar, falls nicht gerne Fragen. Habe schon in anderen gepostet. Auch für Denkanstösse wäre ich überaus dankbar.

http://www.m**s-office-forum.net/forum...d.php?t=350732

Vielen Dank im Voraus und
VG Hanno


Angehängte Dateien
.xlsm   Zusammengefügt_NeuTest2.xlsm (Größe: 111,63 KB / Downloads: 7)
Top
#2
Hallöchen,

hast Du Dich mal mit den Antworten im anderen Forum genauer beschäftigt? Dann mal hier ein erster Denkanstoß.

Dort hast Du z.B. so eine codezeile bekommen, die Zellinhalte mit den ersten 7 Zeichen einer anderen Zelle vergleicht.

Code:
Sheets("Zieltabelle").Cells(i, 4).Value = Left(Quelle.Cells(i, 2).Value, 7)

Nun willst Du Daten auf ein Blatt kopieren, welches teilweise wie der Zellinhalt heißt.

Hiermit werden die linken 7 Zeichen genommen:
Left(Quelle.Cells(i, 2).Value, 7)

Da Du 12 willst, änderst Du die 7 zur 12.

Hier wird die Tabelle "Zieltabelle" angesprochen:

Sheets("Zieltabelle").Cells(i, 4).Value

Da Deine Zieltabelle dem Namen nach die 12 Zeichen hat, wäre das dann so:

Sheets(Left(Quelle.Cells(i, 2).Value, 7))....
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • HannesMW
Top
#3
Hallo schauan,

erstmal Danke für die Rückmeldung. Ich habe mich wirklich viel mit der erhaltenen Hilfe beschäftigt, nur muss ich zugeben, dass ich nicht das VBA-Ass bin.
Jedoch möchte ich es verstehen und lernen und benötige diese Aufgabenstellung für meine Bachelorarbeit.

Ich habe schon den erhaltenen Code versucht nachzuvollziehen, jedoch hat der Code nicht den gesamten Rest der Quelltabelle in die Zieltabellen kopiert und wie man das hinkriegt, leider keine Ahnung.

Bei dem Post anfangs war es nur für mich, um VBA besser verstehen zu können, jetzt bei diesem gezielten Problem, habe ich Schwierigkeiten und wäre über jede Hilfe überaus dankbar.

Kann der Code auch alle Zeilen rüberkopieren, während er die Meilensteine betrachtet?

Viele Grüße und herzlichen Dank für die Hilfe.

Hanno
Top
#4
Hallöchen,

das Kopieren einer Zelle hast Du aber nun mit meinen Hinweisen hinbekommen?

Dann wäre der nächste Schritt, mehrere Zellen zu kopieren. Da gibt es z.B. diese beiden Wege.

Zum einen kannst Du bei der Verfahrensweise mit dem .Value bleiben, also die Zellwerte übertragen.
Ich bleibe mal bei dem Code aus dem anderen Forum, Du musst dann wieder den variablen Blattnamen einsetzen.

So ging es um eine Zelle
Sheets("Zieltabelle").Cells(i, 4).Value

Mehrere bekommst Du dann so
Sheets("Zieltabelle").Range(Cells(i, 4),Cells(i, 6)).Value=...

Auf der Qellseite - rechts neben dem = - baust Du den Bereich mit dem Range genau so auf. Der muss dann die gleiche Größe haben.
Der Zielbereich geht von Spalte 4 = D bis Spalte 6 = F
Die Quelldaten können natürlich aus anderen Spalten sein.

Der andere Weg wäre eine Kopie.
Da musst Du nur den Quellbereich wie gerade geschildert erweitern und im Zielbereich reicht die erste Zelle, im Prinzip so:

Range(Cells(i, 14),Cells(i, 16)).Copy Sheets("Zieltabelle").Cells(i, 4)
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • HannesMW
Top
#5
Hallo schauan,

danke für die ausführliche Rückmeldung! Ich versuche es wirklich zu verstehen, aber checke nicht mal welcher dein Ausgangscode ist:D
Meine Unwissenheit ist beschämend :)

Der Code aus dem anderen Forum (nochmal ein Dank darüber), vergleicht die ersten 7 Zeichen der Spalte F. Das soll ja auch so bleiben.


Was ich gern hätte, ist, dass die Spalte G auf die ersten 12 Zeichen gelesen wird und diese dann in die Zieltabellen kopiert werden. Also wenn die ersten 12 Zeichen (das mit dem links hab ich soweit verstanden) aus Spalte G mit dem Zieltabellenblattnamen übereinstimmt, die komplette Zeile in das jeweilige Zieltabellenblatt kopiert. Ich versteh leider nicht wie ich das hinkriegen soll.

Ich bin dir wirklich mehr als dankbar für die Mühe und ich versuche weiterhin das so mit deinen Hinweisen hinzukriegen.

LG Hanno
Top
#6
Hallöchen,

im Prinzip so:

Rows(i).Copy Sheets(Left(Cells(i, 7).Value, 12)).Rows(i)

Das würde den Inhalt der Zeile i in die Zeile i des Zielblattes kopieren. Der Name des Zielblattes ergibt sich dabei aus den ersten 12 Zeichen der Zelle Gi
Wenn sich aus den Einträgen in Spalte G unterschiedliche Blattnamen ergeben, wird in unterschiedliche Blätter kopiert.

Wenn Du den Namen vom Zielblatt vorher schon definierst, und nur die Zeilen übernehmen willst, die den Zielblattnamen in Spalte G enthalten, dann im Prinzip so:

If Zielblatt = Left(Cells(i, 7).Value, 12) Then
Rows(i).Copy Sheets(Left(Quelle.Cells(i, 7).Value, 12)).Rows(i)
End If

In der Annahme, dass Quelle das aktive Blatt ist habe ich das hier mal weggelassen.
Ich prüfe nicht, ob es das Zielblatt gibt.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • HannesMW
Top
#7
Hallo schauan,

werde mich nochmal intensiver damit beschäftigen und mich dann melden!

Danke dir
LG Hanno
Top
#8
Hi schauan,

ich habe wirklich Schwierigkeiten deine Hinweise umzusetzen. Könntest du das eventuell etwas einfacher für mich gestalten? Vielleicht in dem Code aus dem anderem Forum?

Ich weiß das ist Meckern auf hohem Niveau. Vielen Dank dir:)

LG Hanno
Top
#9
Hallo,

wer hat denn die ganzen codes in Deiner Beispielmappe geschrieben? Habt Ihr da mal einen Programmierer beauftragt?
Der Code aus #38 scheint ganz gut zur Aufgebe zu passen. Hier erst mal wieder nur die Sache mit dem Kopieren der Zeile.

Code:
Sub TorNeu()
Dim i As Integer
Dim r As Long
Dim Quelle As Worksheet
Dim Ziel As String
On Error Resume Next
Set Quelle = Sheets("QuellTabelle")
    For i = 2 To Quelle.Cells(Rows.Count, "A").End(xlUp).Row
        Ziel = Left(Quelle.Cells(i, "G").Value, 12)
        r = Sheets(Ziel).Cells(Rows.Count, "C").End(xlUp).Row + 1
        Rows(i).Copy Sheets(Ziel).Rows(r)
    Next
End Sub
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • HannesMW
Top
#10
Hallo schauan,

du dachtest doch nicht wirklich, dass die Codes von mir waren:D:D

Die hat mir mein Betreuer für meine Abschlussarbeit so hingeklatscht, er weiß selber nicht woher die sind glaube ich.

Das ist halt nur ein Schritt zur Optimierung von Programmen für das Projekt Management (falls dich der Hintergrund meines Problemes interessiert).
Ist jedoch nur dieses Problem, welcher meine Abschlussarbeit mit VBA zutun hat.

Danke dir für deine Hilfe, werde es mir mal in Ruhe anschauen und mich melden.

VG Hanno
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste