Перемещение строк между двумя листами в пределах одной книги

Перемещение строк между двумя листами в пределах одной книги

У меня есть 2 рабочих листа (назовем их worksheet1 и worksheet2) в 1 рабочей книге (один файл Excel). workseet1 содержит 2 столбца: Описание и Столбец (2 варианта: Завершено и В процессе).

ОписаниеиПоложение дел(Завершено/В процессе)

Мое требование: Когда я выбираю статус = В процессе (из выпадающего списка), вся эта строка должна быть перемещена на второй рабочий лист, т. е. worksheet2. Так что у меня останутся только строки, которые имеют статус = Завершено на рабочем листе. То есть, рабочий лист1 будет содержать только строки, которые имеют Статус = Завершено, а второй рабочий лист, т. е. worksheet2, будет содержать только строки, которые содержат Статус = В процессе.

В тот момент, когда я выбираю любую опцию из списка «Статус», она перемещается на соответствующий рабочий лист.

ТИА

решение1

Не совсем понимаю, зачем вам нужно разбивать данные, но вы можете использовать Worksheet_Change()событие в VBA, чтобы добиться желаемого.

Это идет вЗаполненные рабочие листыКод:

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

Это идет вРабочий лист в процессе выполненияКод:

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

Это входит вСтандартный модуль:

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

Связанный контент