단일 통합 문서 내의 두 워크시트 간에 행 이동

단일 통합 문서 내의 두 워크시트 간에 행 이동

1개의 통합 문서(단일 Excel 파일)에 2개의 워크시트(worksheet1 및 worksheet2로 이름 지정)가 있습니다. workseet1에는 설명과 열(2개 선택: 완료됨 및 진행 중)이라는 2개의 열이 포함되어 있습니다.

설명그리고상태(완료/진행 중)

내 요구 사항: 드롭다운 목록에서 상태 = 진행 중을 선택하면 이 전체 행을 두 번째 워크시트, 즉 worksheet2로 이동해야 합니다. 그래서 워크시트에는 완료 상태인 행만 남습니다. 즉, worksheet1에는 Status = Completed인 행만 포함되고 두 번째 워크시트, 즉 worksheet2에는 Status = In-progress인 행만 포함됩니다.

상태에서 옵션을 선택하는 순간 해당 옵션이 해당 워크시트로 이동됩니다.

티아

답변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

관련 정보