Verschieben von Zeilen zwischen zwei Arbeitsblättern innerhalb einer einzelnen Arbeitsmappe

Verschieben von Zeilen zwischen zwei Arbeitsblättern innerhalb einer einzelnen Arbeitsmappe

Ich habe 2 Arbeitsblätter (nennen wir sie Arbeitsblatt1 und Arbeitsblatt2) in 1 Arbeitsmappe (einzelne Excel-Datei). Arbeitsblatt1 enthält 2 Spalten: Beschreibung und Spalte (2 Auswahlmöglichkeiten: Abgeschlossen und In Bearbeitung).

BeschreibungUndStatus(Abgeschlossen/In Arbeit)

Meine Anforderung: Wenn ich den Status = In Bearbeitung (aus der Dropdown-Liste) auswähle, muss diese gesamte Zeile in das zweite Arbeitsblatt, also Arbeitsblatt2, verschoben werden. So bleiben mir nur die Zeilen mit dem Status = Abgeschlossen im Arbeitsblatt. Das heißt, Arbeitsblatt1 enthält nur Zeilen mit dem Status = Abgeschlossen und das zweite Arbeitsblatt, also Arbeitsblatt2, enthält nur Zeilen mit dem Status = In Bearbeitung.

Sobald ich eine beliebige Option aus dem Status auswähle, wird sie in das entsprechende Arbeitsblatt verschoben.

TIA

Antwort1

Ich bin nicht ganz sicher, warum Sie Ihre Daten aufteilen möchten, aber Sie können das Worksheet_Change()Ereignis in VBA verwenden, um Ihr Ziel zu erreichen.

Dies geht in dieAusgefüllte ArbeitsblätterCode:

Private Sub Worksheet_Change(ByVal Target As Range)
    'This goes into your "Completed" worksheet's module

    Dim RngB As Range
    Set RngB = Intersect(Target, Range("B:B"))

    If RngB Is Nothing Then Exit Sub
    Application.EnableEvents = False

    Dim cel As Range, wsInProgress As Worksheet, retVal As Variant

    '!!! Change the worksheet name to whatever it is that moves from your completed
    'worksheet to the in-progress worksheet...
    Dim wsInProgress As Worksheet
    Set wsInProgress = ThisWorkbook.Worksheets("In-Progress")

    For Each cel In RngB.Cells
        Debug.Print cel.Address
        If cel.Value = "In-Progress" Then
            wsInProgress.Rows(nextrow(wsInProgress)) = cel.EntireRow.Value
            cel.EntireRow.Delete
        End If
    Next
    Application.EnableEvents = True
End Sub

Dies geht in dieArbeitsblätter in BearbeitungCode:

Private Sub Worksheet_Change(ByVal Target As Range)
    'This goes into your "In-Progress" worksheet's module

    Dim RngB As Range
    Set RngB = Intersect(Target, Range("B:B"))

    If RngB Is Nothing Then Exit Sub
    Application.EnableEvents = False

    Dim cel As Range, wsInProgress As Worksheet, retVal As Variant

    '!!! Change the worksheet name to whatever it is that moves from your completed
    'worksheet to the in-progress worksheet...
    Dim wsCompleted As Worksheet
    Set wsCompleted = ThisWorkbook.Worksheets("Completed")

    For Each cel In RngB.Cells
        Debug.Print cel.Address
        If cel.Value = "Completed" Then
            wsInProgress.Rows(nextrow(wsCompleted)) = cel.EntireRow.Value
            cel.EntireRow.Delete
        End If
    Next
    Application.EnableEvents = True
End Sub

Dies geht in eineStandardmodul:

Public Function nextRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
    nextRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row + 1
End Function

verwandte Informationen