Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1664to1668
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
Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 08:52:47
Peter
Guten Tag zusammen.
Ich habe ein gutes Script im Netz gefunden um Zeilen zu kopieren wenn die Bedingung erfüllt ist.
Da ich mit VBA noch nicht lange arbeite, habe ich natürlich auch schon die ersten Probleme.
Wenn ich das Script ausführe, werden nicht alle Zeilen kopiert die ein "Ja" in Spalte R enthalten. Muss ich da noch was ergänzen?
Die letzten vier Zeilen die auch mit "Ja" markiert wurden, werden jeweils nicht in die Tabelle2 kopiert.
Sub BedingteKopieZeilen()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
With Tabelle1
ZeileMax = .UsedRange.Rows.Count
n = 5
For Zeile = 1 To ZeileMax
If .Cells(Zeile, 18).Value = "Ja" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1
End If
Next Zeile
End With
End Sub

29
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 08:57:40
Hajo_Zi

Option Explicit
Sub BedingteKopieZeilen()
Dim Zeile As Long
Dim ZeileMax As Long
Dim n As Long
With Tabelle1
ZeileMax = .UsedRange.SpecialCells(xlCellTypeLastCell).Row
n = 5
For Zeile = 1 To ZeileMax
If .Cells(Zeile, 18).Value = "Ja" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1
End If
Next Zeile
End With
End Sub

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:12:18
Peter
Hallo Hajo
Herzlichen Dank! Funktioniert einwandfrei.
Dann lag es wohl bei der Bezeichnung "UsedRange.SpecialCells(xlCellTypeLastCell).Row"
Was bedeutet das mit dem Option Explicit? Wo und wie wende ich es an?
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:18:18
Hajo_Zi
das bedeutet das alle variablen vor der erten Verwendung definiert werden müssen. das kann man unter Optionen eionstellen.
Das machen nur Programmierer, Laien machen das fast nie.
Gruß Hajo
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:21:34
Peter
Danke Hajo, wieder was dazu gelernt.
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:13:46
Werner
Hallo Peter,
also ich würde die letzte belegte Zeile nicht über UsedRange ermitteln. Zudem zählst du in deiner Version die vorhandenen Zeilen in deinem UsedRange und stellst nicht die letzte belegte Zeile fest.
Die Schlefe zum Löschen dann aber von hinten nach vorne laufen lassen.
Sub BedingteKopieZeilen()
Dim Zeile As Range, n As Long
Application.Screenupdating = False
n = 5
With Tabelle1
For Zeile = .Cells(.Rows.Count, 18).End(xlUp).Row To 1 Step -1
If .Cells(Zeile, 18).Value = "Ja" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1
End If
Next Zeile
End With
End Sub
Gruß Werner
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:19:39
Peter
Hallo Werner
Danke für dein Tipp.
Leider kommt beim Auslösen des Scripts ein Fehler. Das Wort Zeile wird dabei markiert und der Fehler lautet Typen unverträglich.
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:23:45
Werner
Hallo Peter,
mein Fehler, Zeile muss als Long Dimensioniert werden und nicht als Range.
Gruß Werner
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:26:43
Werner
Hallo Peter,
außerdem löschst du die Zeile im Blatt 1 ja gar nicht (keine Ahnung wie ich da drauf gekommen bin). Also braucht die Schleife auch nicht von unten nach oben zu laufen.
Sub BedingteKopieZeilen()
Dim Zeile As Long, n As Long
Application.ScreenUpdating = False
n = 5
With Tabelle1
For Zeile = 1 To .Cells(.Rows.Count, 18).End(xlUp).Row
If .Cells(Zeile, 18).Value = "Ja" Then
.Rows(Zeile).Copy Destination:=Tabelle2.Rows(n)
n = n + 1
End If
Next Zeile
End With
End Sub
Gruß Werner
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:33:58
Peter
Hallo Werner
Funktioniert jetzt auch.
Nun bin ich etwas ratlos. Was ist an deinem Script besser als das von Hajo? Oder besser gesagt, wo liegen die Vorteile?
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 09:51:31
Werner
Hallo Peter,
weil die Feststellung der letzten belegten Zeile über UsedRange ein "unsicherer" Kandidat ist.
Das ist nur dann zuverlässig, wenn Excel zuvor gespeichert wurde.
Teste mal mit folgender Datei:
1. direkt nach Öffnen der Datei mal auf die Schaltfläche klicken
In einer Messagebox wird dir jetzt zunächst die letzte belegte Zeile ausgegeben ermittelt über
UsedRange
In einer Messagebox wird dir dann die letzte belegte Zeile ausgegeben ermittelt über
Cells.Rows.Count
Ergebnis: Beide Werte sind gleich
2. Schreib in Spalte A, direkt in die erste freie Zeile mal ein Datum und klick danach wieder auf die Schaltfläche
Messagebox letzte Zeile über UsedRange
Messagebox letzte Zeile über Cells.Rows.Count
Ergebnis: Beide Werte sind gleich
3. Lösch das Datum in Spalte A wieder (Zelle auswählen und Entfernen Taste) und klick auf die Schaltfläche
Messagebox letzte Zeile über UsedRange
Messagebox letzte Zeile über Cells.Rows.Count
Jetzt gibt dir Excel einen "falschen" Wert in der ersten Messagebox aus. Das liegt daran, dass die Zelle für Excel noch zum UsedRange gehört, weil sie vorher mit dem Datum belegt war, obwohl sie zwischenzeitlich leer ist. Das wird nur zuverlässig angepasst, wenn Excel zuvor gespeichert wurde.
https://www.herber.de/bbs/user/126451.xlsm
Gruß Werner
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 10:42:21
Peter
Hallo Werner
Herzlichen Dank für deine sehr Ausführliche Erklärung. Leuchtet ein und macht Sinn. Zumal man nicht davon ausgehen kann dass jeder die Tabelle vor dem auslösen des Scripts speichert.
Ich wünsche dir noch einen angenehmen Tag.
Gruss Peter
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 11:20:28
Peter
äm Werner
Darf ich noch eine Frage stellen?
Da mit dem Script die ganze Zeile kopiert wird und die Formeln gleich mit, kann man auch definieren bis wo (welche Spalte) kopiert werden soll?
Dann überschreibt es mir nicht die Formeln in der Zieldatei.
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 12:55:55
Peter
äm Werner
Darf ich noch eine Frage stellen?
Da mit dem Script die ganze Zeile kopiert wird und die Formeln gleich mit, kann man auch definieren bis wo (welche Spalte) kopiert werden soll?
Dann überschreibt es mir nicht die Formeln in der Zieldatei.
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
03.01.2019 15:34:42
Werner
Hallo Peter,
aber klar doch.
Sub BedingteKopieZeilen()
Dim Zeile As Long, n As Long
Application.ScreenUpdating = False
n = 5
With Tabelle1
For Zeile = 1 To .Cells(.Rows.Count, 18).End(xlUp).Row
If .Cells(Zeile, 18).Value = "Ja" Then
.Range(.Cells(Zeile, 1), .Cells(Zeile, 5)).Copy Tabelle2.Rows(n)
n = n + 1
End If
Next Zeile
End With
End Sub
Im Codebeispiel wird der Bereich von Spalte A (.Cells(Zeile, 1)
bis Spalte E (.Cells(Zeile, 5) kopiert.
Gruß Werner
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
04.01.2019 06:32:41
Peter
Guten Morgen Werner
Herzlichen Dank für deine Ausführung. Langsam verstehe ich die Prozedur.
Anstelle des Rows wird nun der Bereich Cells vor dem Kopieren definiert. Nun, es wird wahrscheinlich noch dauern bis ich das vba verstehe. Aber anhand von solchen Erklärungen wie du sie geschrieben hast, kann ich das ganze auch nachvollziehen.
liebe Grüsse Peter
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
04.01.2019 07:43:04
Peter
Hallo Werner
Nun habe ich probiert anhand von zwei Merkmalen den Script zu erweitern. Habe aber jetzt einen Fehler.
Meine Liste soll eben anhand vom Jahr (_2019, _2020 usw.) und wenn da schon was gemacht wurde, mit dem Kriterium (Ja) in die jeweiligen Tabellen vom Jahr _2019 usw. verschoben werden. Daher meine Komplizierte Lösung.
Sub BedingteKopieZeilen19()
ActiveSheet.Unprotect Password:=""
Tabelle10.Unprotect Password:=""
Dim Zeile As Long, n As Long
Application.ScreenUpdating = False
n = 5
With Tabelle7
For Zeile = 1 To .Cells(.Rows.Count, 7).End(xlUp).Row
If .Cells(Zeile, 7).Value = "_2019" Then
For Zeile = 1 To .Cells(.Rows.Count, 25).End(xlUp).Row
If .Cells(Zeile, 25).Value = "Ja" Then
.Range(.Cells(Zeile, 1), .Cells(Zeile, 19)).Copy Tabelle10.Rows(n)
n = n + 1
End If
Next Zeile
End With
ActiveSheet.Protect Password:=""
Tabelle10.Protect Password:=""
End Sub

Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
04.01.2019 08:49:44
Werner
Hallo Peter,
1. du kannst nicht zweimal die gleiche For - Steuervariabel im gleichen Code verwenden. Aber das hat dir der Debugger ja bereits gesagt.
2. Wenn du zwei For- Schleifen hast, dann brauchst du auch zweimal Next. Aber die zweite For-Schleife brauchst du gar nicht
3. Wenn du einen Blattschutz ohne Kennwort hast, dann brauchst du beim Entsperren/Sperren das nicht anzugeben.
Versuch mal:
Sub BedingteKopieZeilen19()
Dim Zeile As Long, n As Long
Application.ScreenUpdating = False
ActiveSheet.Unprotect
Tabelle10.Unprotect
n = 5
With Tabelle7
For Zeile = 1 To .Cells(.Rows.Count, 7).End(xlUp).Row
If .Cells(Zeile, 7).Value = "_2019" Then
If .Cells(Zeile, 25).Value = "Ja" Then
.Range(.Cells(Zeile, 1), .Cells(Zeile, 19)).Copy Tabelle10.Rows(n)
n = n + 1
End If
End If
Next Zeile
End With
ActiveSheet.Protect
Tabelle10.Protect
End Sub
Du prüfst in der Schleife erst, ob in Zelle G? "_2019" steht, wenn ja dann prüfst du ob in Zelle S? ein "Ja" steht. Sind beide Bedinungen erfüllt, dann wird kopiert. Ist eine der beiden Bedingungen nicht erüllt, dann wird nicht kopiert.
Gruß Werner
Anzeige
AW: Zeile kopieren wenn bedingung Ja erfüllt ist
04.01.2019 09:12:43
Peter
Hallo Werner
Ah, man schliesst lediglich die zwei If mit End If und End If ab, dann kann man mehrere Abfragen (wie in unserem Beispiel) hineinpacken.
Das mit dem Passwort ist eigentlich so gedacht dass wenn alles steht, ein Passwort hineingeschrieben wird und ich jetzt nicht immer das Passwort eingeben muss um das Blatt zu entsperren. Habe ich jetzt aber so gemacht wie du es vorgeschlagen hast.
Das ganze habe ich unterdessen auch schon ausprobiert und klappt hervorragend. Vielen lieben Dank!
Ich hoffe dass ich auch mal helfen kann, wenn jemand mal rat braucht.
liebe Grüsse Peter
Anzeige
Anmerkung
04.01.2019 10:43:58
Werner
Hallo Peter,
jetzt stellt sich lediglich die Frage von wievielen Daten wir da sprechen. Wenn es sich um eine größere Datenmenge handelt, die beide Bedingungen erfüllen und kopiert werden sollen, dann ist eine zeilenweise Abarbeitung (viele einzelne Kopiervorgänge) per Schleife zu langsam und ich würde da einen völlig anderen Ansatz (Autofilter per Makro) wählen.
Aber die Frage kannst nur du beantworten.
Gruß Werner
AW: Anmerkung
04.01.2019 11:09:08
Peter
Hallo Werner
Ach so. Ich habe im meinem File bis zu 1000 Zeilen die abgearbeitet werden müssen. Leider kann ich dir mein File aus Datenschutzgründen nicht zeigen, sonnst würdest du sofort sehen was ich meine oder wie ich es gedacht habe aufzubauen.
Es geht um Verträge die an einem bestimmten Datum Reguliert werden müssen. Sobald die Regulierung geschehen ist, sollen natürlich die neu dazukommenden Datensätze die alten nicht überschreiben. Daher das hin und her kopieren.
Was hindert dich daran...
04.01.2019 12:57:13
Werner
Hallo Peter,
...die Datei zu nanonymisieren. Deine Datei (Aufbau wie im Original) mit 10-15 Datensätzen würde reichen.
Gruß Werner
AW: Was hindert dich daran...
04.01.2019 13:18:46
Peter
Dann muss ich schauen wie ich das übers Wochenende rasch nachbauen kann (auf meinem Privaten PC) Denn bei uns in der Firma wird IT-Mässig alles gesperrt und Verschlüsselt. Wird ein Excel Extern verschickt, stehen schon die Sicherheitsleute auf der Matte.
Bilder kann man hier nicht einfügen?
AW: Was hindert dich daran...
04.01.2019 13:20:42
Werner
Hallo Peter,
schon, aber was soll ich mit einem Bild? Dann sollte ich auch noch wissen welcher Bereich dann letztendlich kopiert werden soll. Von Spalte ? bis Spalte ?
Gruß Werner
AW: Was hindert dich daran...
04.01.2019 13:30:21
Peter
Dann muss ich es nachbauen. Alles andere ist gesperrt. Sogar per USB kann ich nichts Speichern.
AW: Was hindert dich daran...
04.01.2019 13:33:14
Werner
Hallo Peter,
dann warte ich mal. Aber bitte die Datei als .xlsx hier einstellen (also ohne Makros). Bin am Wochenende am Arbeiten und .xlsm kann ich an meinem Arbeitsplatz nicht öffnen.
Gruß Werner
AW: Was hindert dich daran...
06.01.2019 12:40:54
Peter
Leider kann ich dir .xlsx Datei nich auswählen um hochzuladen. Weis nich wieso?
Alles genau gelesen, was auf der Uploadseite
06.01.2019 13:03:04
Daniel
Geschrieben steht und auch beachtet?
Wenn man das tut, sollte der Upload auch funktionieren.
Gruß Daniel
AW: Alles genau gelesen, was auf der Uploadseite
07.01.2019 07:19:00
Peter
Eventuell liegt es am Mac. Wenn ich das File auswählen möchte, ist es nur grau markiert und kann nicht ausgewählt werden.
Gerne u. Danke für die Rückmeldung. o.w.T.
03.01.2019 11:21:21
Werner

266 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige