Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Zellen kopieren wenn Bedingung erfüllt

VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 12:15:35
Markus
Hallo zusammen,
2. Versuch. ;-)
ich habe eine Tabelle 1 mit sämtlichen Daten und Statusmeldungen. Nun möchte ich ich die Zeile (von Spalte A bis Spalte BL) in ein neues Tabellenblatt2 verschieben (kopieren) wenn der Status "fertig" gesetzt wird. Ich habe schon etwas ähnliches gefunden, allerdings fügt das Makro die Zeile unterhalb meiner angegebenen Tabelleblatt 2 ein und bindet sie nicht in die markierte Tabelleblatt2 ein. Wenn möglich, sollte das Makro in der Tabelleblatt2 das aktuelle Datum der Fertigmeldung notieren.
Wenn mir da jemand einen Tipp geben könnte, was auch das Übertragungsdatum betrifft wäre ich echt froh.
Schon mal vielen Dank
Markus
https://www.herber.de/bbs/user/130241.xlsm
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 12:27:12
Torsten
deine Datei ist passwort geschuetzt
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 12:29:35
Markus
UPS, sorry
0000
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 12:47:14
Torsten
Hi Markus,
versuch mal die Groesse des Tabellenobjekts (ListObject) neu festzulegen (Resize) nach dem Kopiervorgang:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngErste As Long
If Target.Column = 13 Then 'Spalte Status
If Target.Count = 1 Then
If UCase(Target) = "FERTIG" Then
With Worksheets("fertige Aufträge")
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Rows(Target.Row).Copy
.Cells(lngErste, 1).PasteSpecial Paste:=xlValues
Rows(Target.Row).Delete Shift:=xlUp
End With
End If
End If
End If
Dim tbl As ListObject
Dim Lrow1 As Long
Lrow1 = Worksheets("fertige Aufträge").Cells(Rows.Count, "A").End(xlUp).Row
Set tbl = Worksheets("fertige Aufträge").ListObjects("Tabelle5")
tbl.Resize tbl.Range.Resize(Lrow1)
End Sub
Gruss Torsten
Anzeige
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 13:35:01
Markus
Vielen Dank erst mal.
Thorsten, allerdings kopiert er 3 zwischen Zeilen in die fertigen Aufträge. ?
Hättest Du auch eine Idee in den fertigen Aufträgen ein Datum einzufügen wann dieser in die Fertigen Aufträge hinein kopiert wurde?
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 13:03:57
Werner
Hallo Markus,
1. deine intelligente Tabelle in "fertige Aufträge" geht nicht bis Spalte BL (entsprechend erweitern)
2. kopierst du eine ganze Zeile und nicht nur den entsprechenden Bereich.
Wenn du die intelligente Tabelle erweiterst und auch nur den entsprechenden Bereich
Range(Cells(Target.Row, "A"), Cells(Target.Row, "BL")).Copy

kopierst, dann funktioniert das auch.
Gruß Werner
Anzeige
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 13:37:06
Markus
Danke Werner,
ja ich habe die Tabelle erweitert.
Habe ich gar nicht daran gedacht. ;-)
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 13:52:43
Werner
Hallo Markus,
und hier mit Datum in Spalte BM (intelligente Tabelle vorher entsprechend erweitern)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lngErste As Long
If Target.Column = 13 Then 'Spalte Status
If Target.Count = 1 Then
If UCase(Target) = "FERTIG" Then
Application.ScreenUpdating = False
With Worksheets("fertige Aufträge")
lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
.Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
Range(Cells(Target.Row, "A"), Cells(Target.Row, "BL")).Copy
.Cells(lngErste, 1).PasteSpecial Paste:=xlValues
.Cells(lngErste, "BM") = Date
Rows(Target.Row).Delete Shift:=xlUp
End With
End If
End If
End If
End Sub
Und gewöhn dir an, beim Code mit Einrückungen zu arbeiten. So sieht man gleich was wohin gehört. Besonders bei If - End If bzw. With - End With sieht man dann sofort wo ggf. ein End With fehlt.
Noch was: Schau dir mal deine bedingten Formatierungen an, die sind drei und vierfach vorhanden.
Zudem kannst du die Regel für die Auswahl von "fertig" komplett raus schmeißen. Die Daten werden ja jetzt in ein Blatt verschoben, da macht die bedingte Formatierung für diesen Fall keinen Sinn mehr.
Gruß Werner
Anzeige
AW: VBA Zellen kopieren wenn Bedingung erfüllt
06.06.2019 14:00:12
Markus
Ja, Super! Das ist klasse, Vielen Dank
Gerne u. Danke für die Rückmeldung. o.w.T.
06.06.2019 14:05:42
Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA für das Kopieren von Zellen bei erfüllter Bedingung


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und lade dein Arbeitsblatt. Stelle sicher, dass deine Daten in der ersten Tabelle (z.B. "Tabelle1") stehen.

  2. Öffne den Visual Basic for Applications (VBA) Editor. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge den folgenden Code in das betreffende Arbeitsblatt ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim lngErste As Long
       If Target.Column = 13 Then 'Spalte Status
           If Target.Count = 1 Then
               If UCase(Target) = "FERTIG" Then
                   Application.ScreenUpdating = False
                   With Worksheets("fertige Aufträge")
                       lngErste = IIf(IsEmpty(.Cells(.Rows.Count, 1)), _
                       .Cells(.Rows.Count, 1).End(xlUp).Row, .Rows.Count) + 1
                       Range(Cells(Target.Row, "A"), Cells(Target.Row, "BL")).Copy
                       .Cells(lngErste, 1).PasteSpecial Paste:=xlValues
                       .Cells(lngErste, "BM") = Date ' Datum einfügen
                       Rows(Target.Row).Delete Shift:=xlUp
                   End With
               End If
           End If
       End If
    End Sub
  4. Schließe den VBA-Editor und teste den Code. Ändere den Status einer Zeile in "FERTIG" und beobachte, ob die Zeile korrekt in das andere Tabellenblatt kopiert wird.


Häufige Fehler und Lösungen

  • Problem: Zwischenzeilen werden in das Zielblatt kopiert.

    • Lösung: Stelle sicher, dass nur die gesamte Zeile oder der relevante Bereich kopiert wird. Nutze den Code:
      Range(Cells(Target.Row, "A"), Cells(Target.Row, "BL")).Copy
  • Problem: Das Datum wird nicht korrekt eingefügt.

    • Lösung: Überprüfe, ob du den richtigen Zielbereich (z.B. Spalte BM) in deinem Code angibst.

Alternative Methoden

  • Manuelles Kopieren: Du kannst auch manuell die gewünschten Zellen kopieren, indem du die Bedingung überprüfst und die Zeilen einfach verschiebst. Diese Methode ist jedoch zeitaufwändiger.

  • Verwendung von Formeln: Anstatt VBA zu verwenden, kannst du auch Formeln oder bedingte Formatierungen einsetzen, um Daten je nach Status anzuzeigen.


Praktische Beispiele

  • Beispiel 1: Du hast eine Liste von Aufgaben in "Tabelle1" und möchtest alle Aufgaben, die den Status "FERTIG" haben, in "fertige Aufträge" übertragen. Verwende den oben genannten Code, um dies automatisch zu erledigen.

  • Beispiel 2: Du möchtest nur bestimmte Spalten (z.B. A bis C) kopieren. Ändere den Kopierbereich im Code:

    Range(Cells(Target.Row, "A"), Cells(Target.Row, "C")).Copy

Tipps für Profis

  • Code optimieren: Achte darauf, deinen Code gut zu strukturieren. Nutze Einrückungen, um die Lesbarkeit zu verbessern, vor allem bei verschachtelten Bedingungen.

  • Fehlerprotokollierung: Implementiere eine einfache Fehlerprotokollierung, um Probleme schneller zu identifizieren, indem du Debug.Print verwendest.


FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Bedingungen zu berücksichtigen?
Du kannst zusätzliche If-Bedingungen im Code hinzufügen, um verschiedene Status zu überprüfen.

2. Was mache ich, wenn ich Daten aus mehreren Arbeitsblättern kopieren möchte?
Du kannst den Code so anpassen, dass er auf die entsprechenden Arbeitsblätter verweist, indem du die Worksheets("Name")-Referenzen änderst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige