Mover filas entre 2 hojas de trabajo dentro de un solo libro

Mover filas entre 2 hojas de trabajo dentro de un solo libro

Tengo 2 hojas de trabajo (llamémoslas hoja de trabajo1 y hoja de trabajo2) en 1 libro de trabajo (un único archivo de Excel). workseet1 contiene 2 columnas: Descripción y Columna (2 opciones: Completado y En progreso).

DescripciónyEstado(Completado/En progreso)

Mi requisito: cuando selecciono el estado = En curso (de la lista desplegable), toda esta fila debe moverse a la segunda hoja de trabajo, es decir, la hoja de trabajo2. De modo que me quedan solo las filas que tienen el estado = Completado en la hoja de trabajo. Es decir, la hoja de trabajo1 contendrá solo filas que tengan Estado = Completado y la segunda hoja de trabajo, es decir, la hoja de trabajo2 contendrá solo filas que contengan Estado = En curso.

En el momento en que selecciono cualquier opción del Estado, se mueve a su hoja de trabajo respectiva.

tia

Respuesta1

No estoy del todo seguro de por qué desea dividir sus datos, pero puede usar el Worksheet_Change()evento en VBA para lograr lo que busca.

esto va en elHojas de trabajo completadasCódigo:

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

esto va en elHojas de trabajo en progresoCódigo:

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

Esto entra en unMódulo estándar:

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

información relacionada