У меня есть 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