Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeile automatisch verschieben

Zeile automatisch verschieben
16.08.2018 14:07:27
Andreas
Liebe Forums-Mitglieder,
ich suche nach einer Möglichkeit, die Zeile eines Tabellenblattes in ein zweites Tabellenblatt zu verschieben, sobald der Wert der Zelle "Status" auf "genehmigt" geändert wurde. Die Formatierung soll dabei erhalten bleiben.
Vielen Dank für die Unterstützung im Voraus.
Andreas
https://www.herber.de/bbs/user/123378.xlsm
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeile automatisch verschieben
16.08.2018 14:13:41
Werner
Hallo Andreas,
und wie wird der Status auf "genehmigt" geändert, durch "händische" Eingabe?
Gruß Werner
AW: Zeile automatisch verschieben
16.08.2018 14:25:52
Andreas
Hallo Werner,
danke für die schnelle Rückmeldung.
Geplant ist, in der jeweiligen Zelle über ein Drop-Down-Feld aus den in der Legende unten linkes genannten Optionen auszuwählen. Sobald der Status "genehmigt" gewählt wird, soll die Zeile aus dem ersten Tabellenblatt in das Blatt "genehmigt" verschoben werden.
Anzeige
AW: Zeile automatisch verschieben
16.08.2018 14:27:18
Werner
Hallo Andreas,
dann so:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLetzte As Long
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
If Target.Column = 18 Then
If Target.Count = 1 Then
Select Case UCase(Target.Value)
Case "GENEHMIGT", "ABGESCHLOSSEN"
With Worksheets("genehmigt")
loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
If .Cells(1, 1) = "" Then loLetzte = 1
Rows(Target.Row).Copy
.Rows(loLetzte).PasteSpecial Paste:=xlAll
Rows(Target.Row).Delete
End With
Case Else
End Select
End If
End If
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
Gruß Werner
Anzeige
AW: Zeile automatisch verschieben
16.08.2018 14:37:31
Andreas
Hallo Werner,
vielen Dank für den Support! Klappt hervorragend!
Viele Grüße
Andreas
Gerne u. Danke für die Rückmeldung. o.w.T.
16.08.2018 18:54:34
Werner
AW: Zeile automatisch verschieben
16.08.2018 14:39:38
Torsten
oder so:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim myRow As Long
Dim myLastRow1 As Long
Dim myLastRow2 As Long
Dim WS1 As Worksheet: Set WS1 = Worksheets("Projektübersicht")
Dim WS2 As Worksheet: Set WS2 = Worksheets("genehmigt")
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
With WS1
myLastRow1 = .Cells(Rows.Count, 1).End(xlUp).Row
End With
For myRow = myLastRow1 To 6 Step -1
If WS1.Cells(myRow, 18).Value = "genehmigt" Then
With WS2
myLastRow2 = .Cells(Rows.Count, 1).End(xlUp).Row
End With
WS1.Rows(myRow).Copy Destination:=WS2.Rows(myLastRow2 + 1)
End If
Next myRow
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Zeile automatisch verschieben
16.08.2018 15:05:39
Andreas
Hallo Torsten,
Dir auch vielen Dank für die Unterstützung.
Kannst Du mir als VBA-Laien sagen, wo der Unterschied zwischen beiden Varianten liegt?
Gruß Andreas
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeilen in Excel automatisch verschieben


Schritt-für-Schritt-Anleitung

Um Zeilen in Excel automatisch zu verschieben, wenn eine bestimmte Bedingung erfüllt ist, kannst du das folgende VBA-Skript verwenden. Dieses Beispiel zeigt, wie du eine Zeile in ein anderes Tabellenblatt verschiebst, sobald der Status auf "genehmigt" geändert wird.

  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle das entsprechende Arbeitsblatt aus, in dem du die Änderungen vornehmen möchtest.
  3. Füge den folgenden Code in das Codefenster ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim loLetzte As Long
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.Calculation = xlCalculationManual
    If Target.Column = 18 Then ' Spalte für Status
        If Target.Count = 1 Then
            If UCase(Target.Value) = "GENEHMIGT" Then
                With Worksheets("genehmigt")
                    loLetzte = .Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                    Rows(Target.Row).Copy
                    .Rows(loLetzte).PasteSpecial Paste:=xlAll
                    Rows(Target.Row).Delete
                End With
            End If
        End If
    End If
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und teste die Funktion, indem du den Status einer Zeile auf "genehmigt" änderst.

Häufige Fehler und Lösungen

  • Fehler: Die Zeile wird nicht verschoben.

    • Lösung: Stelle sicher, dass die Spalte für den Status korrekt angegeben ist (im Beispiel Spalte 18) und dass die Schreibweise von "genehmigt" genau übereinstimmt.
  • Fehler: Fehlermeldung beim Ausführen.

    • Lösung: Überprüfe, ob die Zielarbeitsblätter korrekt benannt sind und existieren.

Alternative Methoden

Eine weitere Möglichkeit, Excel-Zellen automatisch zu verschieben, besteht darin, die Filter- und Sortierfunktionen von Excel zu nutzen. Durch das Anwenden von Filtern kannst du schnell alle genehmigten Zeilen in einem neuen Tabellenblatt anzeigen lassen, ohne VBA verwenden zu müssen.

  1. Markiere die gesamte Tabelle.
  2. Gehe zu Daten > Filter und aktiviere den Filter für die Statusspalte.
  3. Filtere nach "genehmigt" und kopiere die sichtbaren Zeilen in ein neues Tabellenblatt.

Praktische Beispiele

Ein praktisches Beispiel könnte so aussehen:

  • Du hast eine Tabelle mit Projekten, in der die Statusspalte angibt, ob ein Projekt genehmigt, abgelehnt oder in Bearbeitung ist.
  • Sobald der Status auf "genehmigt" geändert wird, wird die gesamte Zeile automatisch in das Tabellenblatt "genehmigt" verschoben, was dir hilft, den Überblick über genehmigte Projekte zu behalten.

Tipps für Profis

  • Denke daran, die Daten regelmäßig zu sichern, insbesondere wenn du mit VBA arbeitest.
  • Nutze die Application.ScreenUpdating-Einstellung, um die Leistung bei großen Datenmengen zu verbessern, indem du das Aktualisieren des Bildschirms während der Ausführung des Codes deaktivierst.
  • Du kannst mehrere Bedingungen hinzufügen, um verschiedene Status zu berücksichtigen, indem du die Select Case-Struktur im VBA-Code verwendest.

FAQ: Häufige Fragen

1. Wie kann ich den Code anpassen, um mehrere Status zu berücksichtigen? Du kannst die Select Case-Struktur im Code verwenden, um verschiedene Statuswerte zu überprüfen und entsprechend zu handeln.

2. Funktioniert dieser Code in allen Excel-Versionen? Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, solange du die Makros aktiviert hast.

3. Kann ich den Code für andere Spalten verwenden? Ja, du kannst die Spaltennummer im Code ändern, um andere Spalten zu berücksichtigen, indem du die Target.Column-Bedingung anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige