Movendo linhas entre 2 planilhas em uma única pasta de trabalho

Movendo linhas entre 2 planilhas em uma única pasta de trabalho

Eu tenho 2 planilhas (vamos chamá-las de planilha1 e planilha2) em 1 pasta de trabalho (único arquivo Excel). workseet1 contém 2 colunas: Descrição e Coluna (2 opções: Concluído e Em andamento).

DescriçãoeStatus(Concluído/em andamento)

Meu requisito: quando seleciono status = Em andamento (na lista suspensa), toda essa linha deve ser movida para a segunda planilha, ou seja, planilha2. Para que eu fique apenas com as linhas que possuem o status = Concluído na planilha. Ou seja, a planilha1 conterá apenas linhas que tenham Status = Concluído e a segunda planilha, ou seja, a planilha2 conterá apenas linhas que contenham Status = Em andamento.

No momento em que seleciono qualquer opção do Status, ela é movida para sua respectiva planilha.

TIA

Responder1

Não tenho certeza por que você deseja dividir seus dados, mas você pode usar o Worksheet_Change()evento no VBA para realizar o que procura.

Isso vai noPlanilhas preenchidasCó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

Isso vai noPlanilhas em andamentoCó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

Isso entra em umMódulo Padrão:

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

informação relacionada