Anzeige
Archiv - Navigation
1404to1408
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

Bestimmte Zeilen kopieren

Bestimmte Zeilen kopieren
30.01.2015 21:08:59
Thomas
Hallo zusammen,
mit einem Beispiel hier habe ich es geschafft Zeilen in ein anderes Tabellenblatt zu kopieren. Das klappt schon mal ganz gut....
Aber es ist noch nicht perfekt, denn ich möchte das aus der Zeile nur einzelne Zellwerte in das andere Tabellenblatt kopiert werden, also nicht die ganze Zeile.
D.h. aus der zu kopierenden Zeile sollen z.B. nur die Zellen SID, SN, Geräteart, Hersteller, Typ und Sub-Type übertagen werden.
Dann gibt es noch zwei Probleme beim kopieren:
1.) Klicke ich auf die Schaltfläche "CHG-kopieren" werden mal 2 Zeilen die mit dem Kopierkriterium "CHG" versehen sind kopiert, einige bleiben noch in der Quell-Tabelle. Dann muss ich zwei drei mal die Schaltfläche klicken bis alle Daten kopiert sind....das ist unschön da sehr viele Datensätze zu kopieren sind.
2.) In der Zieltabelle werden die Datensätze in Zeile 2, besser wäre es wenn sie statt dessen in Zeile 7 eingefügt werden könnten.
Für jede Hilfe bin ich sehr dankbar.
Gruß Thomas
Hier meine Datei
https://www.herber.de/bbs/user/95435.xlsm

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Codevorschlag
31.01.2015 10:35:59
Erich
Hi Thomas,
wirklich genau hast du nicht beschrieben, was wohin kommen soll. Hier mal ein Versuch:

Option Explicit
Sub chg_Click()
Dim rngDel As Range, rngCop As Range
'   Quellzeile     Zielzeile
Dim iRowQ As Long, iRowZ As Long    ' nicht Integer
For iRowQ = 3 To Cells(Rows.Count, 17).End(xlUp).Row
If InStr(Cells(iRowQ, 17).Value, "CHG") Then
If rngDel Is Nothing Then
Set rngDel = Rows(iRowQ)
Else
Set rngDel = Union(rngDel, Rows(iRowQ))
End If
End If
Next iRowQ
If Not rngDel Is Nothing Then
Set rngCop = Intersect(rngDel, Range("H:M"))
With Worksheets("CHG-Liste")
iRowZ = .Cells(.Rows.Count, 8).End(xlUp).Row + 1
If iRowZ 
Eine Frage zu deinem Code:
Wozu ist in Zeile
Rows(iRow).EntireRow.Delete (iRowT)
das "(iRowT)" gut?
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich und: Schönes Wochenende allerseits!

Anzeige
AW: Codevorschlag
31.01.2015 16:05:08
Thomas
Hallo Erich,
vielen Dank, dein Codebeispiel funktioniert super.
Aber ich musste meinen Ansatz überdenken und die Zeilen in der Quelltabelle dürfen nicht gelöscht werden da diese als Nachweis für die Rückgabe dienen sollen. Dafür soll in der Quelltabelle in Spalte R "In CHG-Liste" ein "X" erscheinen sobald kopiert wurde.
Zu deiner Frage, ich habe diesen Code hier aus den Beispielen übernommen, da es leidlich funktionierte
hab ich es stehen lassen.
Gruß und schönes WE
Thomas

Variante ohne Löschen
31.01.2015 19:50:59
Erich
Hi Thomas,
probier mal

Option Explicit
Sub chg_Click()
Dim rngDel As Range, rngCop As Range, arBem
Dim iRowQ As Long, iRow As Long
iRowQ = Cells(Rows.Count, 17).End(xlUp).Row
arBem = Range(Cells(3, 18), Cells(iRowQ, 18))   ' Spalte R merken
For iRow = 3 To iRowQ
If InStr(Cells(iRow, 17).Value, "CHG") Then
If rngDel Is Nothing Then
Set rngDel = Rows(iRow)
Else
Set rngDel = Union(rngDel, Rows(iRow))
End If
arBem(iRow - 2, 1) = arBem(iRow - 2, 1) & "X"
End If
Next iRow
If Not rngDel Is Nothing Then
Set rngCop = Intersect(rngDel, Range("H:M"))
With Worksheets("CHG-Liste")
iRow = .Cells(.Rows.Count, 8).End(xlUp).Row + 1
If iRow 
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Variante ohne Löschen
01.02.2015 01:27:27
Thomas
Hallo Erich,
dein Codebeispiel ist Klasse, allerdings passiert jetzt folgendes:
Ist ein Datensatz in der Zelle Q mit CHG, dem Kriterium für das kopieren markiert, wird der Datensatz in die Tabelle "CHG-Liste" übertragen, das ist soweit Ok. Aber nach dem kopieren bleibt "CHG" jetzt in der Zelle Q stehen, was zu folge hat, das beim nächsten kopieren dieser Datensatz erneut kopiert wird und dann zwei "X" vorhanden sind usw.
Daher sollte nach dem kopieren das Kriterium "CHG" auf einen anderen Wert gesetzt werden z.B "kopiert".
Mal zur Erklärung was die Tabelle eigentlich soll:
Mitarbeiter haben die Möglichkeit ihre Hardware nach einem Systemwechsel abzumelden, diese Hardware wird dann von uns entweder abgeholt oder manchmal bringen die Mitarbeiter die Gerätschaften zu uns. Die Abholung wird über ein Ticketsystem beantragt. Diese Abholung wird dann in die Excel Tabelle eingetragen, also in die Quelltabelle. Dann prüfe ich ob das zurückgegebene Gerät an CHG zurück muss (Leasing der Geräte) Wenn ja muss eine Liste mit den Geräten für die Rückgabe erstellt werden. Diese Liste der Geräte die zurück gegeben werden müssen könnte ich dann mit dem kopieren "CHG" einfach erstellen. Bisher wurden 2 Exceltabellen von meinem Vorgänger angelegt und leider schlampig geführt.
Danke.

Anzeige
Klärungsversuche
01.02.2015 10:33:11
Erich
Hi Thomas,
"nach dem kopieren bleibt "CHG" jetzt in der Zelle Q stehen, was zu folge hat, das beim nächsten kopieren
dieser Datensatz erneut kopiert wird und dann zwei "X" vorhanden sind usw. "

Das hattest du so "bestellt", oder?
Bevor jetzt immer neue Codeversionen entstehen, sollte das Ziel etwas klarer werden.
"sollte nach dem Kopieren das Kriterium "CHG" auf einen anderen Wert gesetzt werden z.B 'kopiert'"
Bisher wird das Kriterium "CHG" in Spalte Q mit InStr so geprüft:
If InStr(Cells(iRow, 17).Value, "CHG") Then
Damit würde auch z. B. "abc CHGef" gefunden.
In deiner Beispielmappe steht CHG immer allein in der Zelle.
Da würde
If Cells(iRow, 17).Value = "CHG" Then
völlig ausreichen. Soll das so gemacht werden?
Nun soll in Spalte Q der Hinweis "kopiert" anstelle des "CHG" geschrieben werden.
Aus "abc CHGef" würde "abc kopiertef". Ist das so gewollt?
(Wenn nur "CHG" in der Zelle steht, dann kommt das natürlich nur "kopiert" rein.)
Wenn nun das Kopieren in Spalte Q vermerkt wird - brauchst du das "X" in Spalte R überhaupt noch?
"Beim kopieren eines weiteren Datensatzes wird er am Anfang eingefügt und überschreibt den vorhandenen,
das darf nicht sein. Datensätze die hinzukommen sollten am Ende der Liste eingefügt werden."
Mit den Zeilen

With Worksheets("CHG-Liste")
iRow = .Cells(.Rows.Count, 8).End(xlUp).Row + 1
If iRow 
wird die Einfügezeile für die Kopien bestimmt als die Zeile unter dem letzten Eintrag in Spalte H des Blattes "CHG-Liste".
Gibt es bei dir auf diesem Blatt Datensätze, bei denen die Zelle in Spalte H leer ist, aber in I:M etwas steht?
Wenn dem nicht so ist, solltest du eine kleine Beispielmappe mit diesem Fehler hochladen.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Klärungsversuche
03.02.2015 22:25:07
Thomas
Hallo Erich,
entschuldige das ich mich erst jetzt melde.
Es funktioniert jetzt mit deinem Codebeispiel super.
Ich hatte mit deinem Beispiel etwas rumgespielt und ein Parameter vertauscht darum hat es zuerst nicht geklappt, aber jetzt tut es das was ich bzw. mein Chef wollte ;)
Vielen Dank für deine Geduld und Hilfe.
Gruß
Thomas

Antworten?
04.02.2015 10:17:30
Erich
Hi Thomas,
Danke für deine Rückmeldung! :-)
Auch wenn das jetzt funktioniert:
In meinem letzten Beitrag hatte ich dir einige Fragen gestellt, die du jetzt völlig ignoriert hast :-(.
(1)
"Da würde
If Cells(iRow, 17).Value = "CHG" Then
völlig ausreichen. Soll das so gemacht werden?"

(2)
"Aus "abc CHGef" würde "abc kopiertef". Ist das so gewollt?"
(3)
"brauchst du das "X" in Spalte R überhaupt noch?"
Auch Fragesteller dürfen mal Fragen beantworten... :-)
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Antworten?
04.02.2015 22:04:52
Thomas
Hallo Erich,
natürlich beantwortet der Fragensteller auch Fragen, es ist keine böse Absicht oder Ignoranz.
Zu deinen Fragen:
Zu Frage 1.) ja das mit "CHG" reicht völlig aus.
Zu Frage 2.) auch hier ist es gewollt das aus dem Text "CHG" z.B. der Text "kopiert" nach dem Kopiervorgang wird
Dann zu Frage 3.) das "X" in Spalte 3 kann somit entfallen, da ja dann der Hinweis "kopiert" in Spalte "Q" steht.
Gruß
Thomas

AW: Variante ohne Löschen
01.02.2015 02:18:12
Thomas
Hallo Erich,
sorry, aber gerade ist mir leider noch was aufgefallen.
Beim kopieren eines weiteren Datensatzes wird er am Anfang eingefügt und überschreibt den vorhandenen, das darf nicht sein. Datensätze die hinzukommen sollten am Ende der Liste eingefügt werden.
Viele Grüße
Thomas
Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige