Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1420to1424
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

Zeilen Kopieren mit zwei Bedingungen

Zeilen Kopieren mit zwei Bedingungen
29.04.2015 16:53:59
Christian
Hallo ihr lieben,
folgenden VBA-Code habe ich mir aus dem Internet und dem Forum zusammen gesucht.
Sub Test1_Paid()
Dim db As Worksheet, Test1 As Worksheet
Dim x As Long, y As Long, lngZeilen As Long
Set db = Worksheets("Rohdaten")
Set Test1 = Worksheets("Test1")
lngZeilen = db.Cells(db.Rows.Count, 2).End(xlUp).Row
x = 2
For y = 1 To lngZeilen
If db.Cells(y, 8).Value Like "Test1" And db.Cells(y, 6).Value Like "PAID" Then
db.Rows(y).Copy Test1.Rows(x)
x = x + 1
End If
Next y
End Sub
Sub Test1_Backpaid()
Dim db As Worksheet, Test1_Testwert As Worksheet
Dim x As Long, y As Long, lngZeilen As Long
Set db = Worksheets("Rohdaten")
Set Test1_Testwert = Worksheets("Test1_Testwert")
lngZeilen = db.Cells(db.Rows.Count, 2).End(xlUp).Row
x = 2
For y = 1 To lngZeilen
If db.Cells(y, 8).Value Like "Test1" And db.Cells(y, 6).Value Like "BACKPAID" Then
db.Rows(y).Copy Test1_Testwert.Rows(x)
x = x + 1
End If
Next y
End Sub
Sub Test1_Refunded()
Dim db As Worksheet, Test1_Testwert As Worksheet
Dim x As Long, y As Long, lngZeilen As Long
Set db = Worksheets("Rohdaten")
Set Test1_Testwert = Worksheets("Test1_Testwert")
lngZeilen = db.Cells(db.Rows.Count, 2).End(xlUp).Row
x = 2
For y = 1 To lngZeilen
If db.Cells(y, 8).Value Like "Test1" And db.Cells(y, 6).Value Like "REFUNDED" Then
db.Rows(y).Copy Test1_Testwert.Rows(x)
x = x + 1
End If
Next y
End Sub
Sub Repayer_Paid()
Dim db As Worksheet, Repayer As Worksheet
Dim x As Long, y As Long, lngZeilen As Long
Set db = Worksheets("Rohdaten")
Set Repayer = Worksheets("Repayer")
lngZeilen = db.Cells(db.Rows.Count, 2).End(xlUp).Row
x = 2
For y = 1 To lngZeilen
If db.Cells(y, 8).Value Like "REPAYER" And db.Cells(y, 6).Value Like "PAID" Then
db.Rows(y).Copy Repayer.Rows(x)
x = x + 1
End If
Next y
End Sub

Leider passiert nicht ganz das was ich mir vorstelle.
Er kopiert a) nicht alle Werte die die vorgegeben Werte enthalten und b) blendet er Zeilen einfach aus bzw. überschreibt Werte. Besonders bei dem Makro 2 und 3 ist es wichtig das er die Werte nicht überschreibt.
Habt ihr da ne Idee was ich falsch gemacht habe bzw. was ich besser machen kann?

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

Betreff
Datum
Anwender
Anzeige
AW: Zeilen Kopieren mit zwei Bedingungen
29.04.2015 17:13:28
Klexy
Wie wär's mit einer Beispieldatei?

AW: Zeilen Kopieren mit zwei Bedingungen
29.04.2015 18:25:55
Klexy
1. gehört in Blatt Test1 und Test_Storno grundsätzlich erstmal eine Kopfzeile rein. Tabellen ohne Kopfzeilen gehen GAR nicht.
2. sind in der Beispieldatei ganz andere Makros drin als in der Frage. ? Ich vermute stark, dass diese Beispieldatei überhaupt nix mit dem vorliegenden Fall zu tun hat.
3. Welche Werte dürfen wann nicht überschrieben werden? Was soll denn wann überhaupt passieren?
Also: bitte eine neue Musterdatei und eine klare Ansage, was muss, wann es muss, was nicht darf und wann es nicht darf.

Anzeige
AW: Zeilen Kopieren mit zwei Bedingungen
30.04.2015 09:03:23
Christian
Hallo,
sorry für die schlechte Beispiel-Datei die habe ich gestern schnell zusammen gebaut. Leider habe ich dabei geschlampt.
Anbei die neue Beispieldatei: https://www.herber.de/bbs/user/97367.xlsm
Also in das Blatt Monatsabschlüsse kommen jeden Monat neue Daten hinzu, diese werden immer unten dran kopiert.
Nun möchte ich das wenn in Spalte H und F ein gewisser Wert steht das die ganze Zeile in das passende Blatt kopiert wird.
Sprich wenn in Spalte H „First_Payer“ und in Spalte F „Paid“ steht soll die ganze Zeile in das Blatt First_Payer kopiert werden.
Wenn in Spalte H „First_Payer“ und in spalte F „Refunded“ oder „Backpaid“ steht soll die ganze Zeile in das Blatt First_Payer_Strono kopiert werden.
Dabei solle die Zeilen immer nur an die letzte kopiert werden und es soll sofern man das Makro mehrfach ausführt keine doppelten kopiert werden.

Anzeige
AW: Zeilen Kopieren mit zwei Bedingungen
30.04.2015 11:29:14
Klexy
So gefällt mir das.
Nachfragen:
1. Das mit der Doublettenverhinderung geht nur über eine eindeutige Datensatznummer. Diese sollte man in Datenbank-Strukturen immer haben. Ich empfehle dafür eine eigene Spalte vor der Tabelle. Das ist einfach und eindeutig. Man könnte es auch über die Vorgangsnummer machen, wenn diese wirklich eineindeutig ist, aber das ist immer so eine Sache.
2. Wenn in die Abschlüsse immer wieder neue Dateien kommen, sollte hier eine zusätzliche Spalte "übertragen" ans Ende gestellt werden, sonst müsste das Makro jedes Mal alle Datensätze abprüfen, ob sie schon irgendwohin übertragen wurden. Das dauert...
Spricht was gegen diese Tabellenergänzungen?
3. Außerdem vermute ich, dass die Repayer und Sequencer nach der gleichen Logik in ihre Blätter übertragen werden sollen, oder?

Anzeige
AW: Zeilen Kopieren mit zwei Bedingungen
30.04.2015 11:41:26
Christian
Sehr schön und danke für die Hilfe.
Zu deinen Fragen:
1. Also die Vorgangsnummer ist eindeutig und die gibt es auch kein zweites Mal. Von daher kann diese Spalte dafür gerne genommen werden.
2. Sofern diese Spalte mit "Übertragen" automatisch hinzugefügt wäre dies überhaupt kein Problem. Von daher spricht nichts gegen diese Ergänzung.
3.Du hast du vollkommen recht, für die Repayer und Sequencer soll die gleiche Logik vorhanden sein wie bei den First_Payern.

AW: Zeilen Kopieren mit zwei Bedingungen
30.04.2015 16:33:35
Klexy
Ich hab die Makros für Backpaid und Refunded zusammengelegt, weil die aufs gleiche Zielblatt schreiben.
Ich hab die Variablen sprechend benannt.
Die eindeutige Vorgangsnummer hat sich als nicht relevant herausgestellt, weil die "x"-Markierungen in Spalte J genügen.
Ich hab das Makro in ein Modul ausgelagert. Ich finde es da besser aufgehoben als direkt in "DieseArbeitsmappe".
Das Makro färbt den Reiter des jeweils aktuellen Zielblatts türkis. Das ist sinnvoll, weil das Makro recht lange läuft und du dadurch siehst, wo es gerade ist.
Das Makro färbt die bearbeiteten Datensätze in der Quell-Liste:
- grün für paid, rot für backpaid und refunded
- hellgrün für first payer, hellbalu für Repayer, hellgelb für Sequencer
Dadurch siehst du, welcher Datensatz erledigt ist. Zusätzlich wird noch ein "x" in Spalte J gemacht.
Wenn am Ende des Makros noch unübertragene Datensätze übrig sind, werden die hergefiltert und angezeigt.
Am Ende des Makros kommt ein Popup "Fertig"
https://www.herber.de/bbs/user/97389.xlsm
Wenn du neue Datensätze reinkriegst, werden die Zieltabellen jetzt nicht mehr überschrieben.

Anzeige
AW: Zeilen Kopieren mit zwei Bedingungen
30.04.2015 17:16:48
Christian
Vielen Dank, es macht genau das was ich mir vorgestellt habe.
Auch wenn er gerade nicht alles auf ein Mal kopiert hatte und ich den Button mehrfach drücken musste. Aber das ist nicht weiter schlimm da es mir die Arbeit schon sehr sehr vereinfacht. Vielen Dank!

AW: Zeilen Kopieren mit zwei Bedingungen
30.04.2015 18:08:40
Klexy
Sobald man es genau beschreibt, macht es genau das, was man will. Das ist der Trick.

332 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige