2016-10-07 4 views
0

나는 올바른 질문을하지 않았거나이 문제를 다루지 못한 경우 사과를 드리기 위해 매우 새로운 vba (및 코드)에 익숙합니다. 저는 2 주 동안 답을 찾기 위해 노력 했으므로 당신이 도울 수 있기를 바랍니다.vba - 조건으로 인해 한 시트에서 다른 시트로 데이터 복사

Overview/GUI 시트에서 변수 L (변수 "진행 중"또는 "시작되지 않음")의 변수에 따라 하나의 시트 (명명 된 마스터 시트)에서 다른 시트로 데이터를 복사하려고합니다. 현재 코드 (아래)는 데이터의 첫 번째 줄에 대해이 작업을 수행하지만 전체 시트에 대해이 작업을 수행하고 싶습니다. 불행히도 배열이 확장 될 수 있도록 데이터의 양이 변경 될 것입니다. 그것을 만들 것입니다.

제공 할 수있는 도움을 주셔서 감사 드리며 작성한 메모에 사과드립니다. 내가하고 싶은 것을 더 이해하는 데 도움이된다면 사진을 추가 할 수도 있습니다 (가능한 경우).

Sub Update_Uncompleted_Tasks() 
' Update_Uncompleted_Tasks Macro 
' Selects tasks from Master Sheet and copies to the Overview Sheets if assigned as uncompleted 

'DON'T USE BELOW YET (UNSURE IF IT WILL WORK) 
'Maybe Vlookup? 
'Dim LastRow As Long, i As Long 
'LastRow = Cells(Rows.Count, "L").End(xlUp).Row 
'For i = 1 To LastRow 

Sheets("Master Sheet").Select 
    If Range("L2") = "In Progress" Then 
     Range("A2:L2").Select 
     Selection.Copy 
     Sheets("Overview").Select 
     Application.Goto Reference:="R10000C2" 
     Selection.End(xlUp).Select 
     Selection.Offset(1, 0).Select 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 
    ElseIf Range("L2") = "Not Started" Then 
     Range("A2:L2").Select 
     Selection.Copy 
     Sheets("Overview").Select 
     Application.Goto Reference:="R10000C2" 
     Selection.End(xlUp).Select 
     Selection.Offset(1, 0).Select 
     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 
    End If 

'Next i 

End Sub 
+0

워크 시트의 스냅 샷을 제공 할 수 있습니까? – Zac

답변

0

우선이 내용을 살펴보십시오. Avoid using select in Excel-VBA-Macros.

다음 코드는 사용자의 요구 사항을 충족해야하지만, (끝에 도달 할 때까지) 열 L에서 데이터가 빈 셀이없는 것을 요구

Sub Update_Uncompleted_Tasks() 
    Dim row as Long 

    'Initial value 
    row = 2 

    With ThisWorkbook.Worksheets("Master Sheet") 
    Do Until IsEmpty(.Range("L" & row)) 
     If (.Range("L" & row).Value = "In Progress") Or (.Range("L" & row).Value = "Not Started") Then 
     .Range("A" & row & ":L" & row).Copy 
     ThisWorkbook.Worksheets("Overview").Range("B10000").End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
     End If 
     row = row + 1 
    Loop 
    End With 
End Sub 

행에 도달했을 때 루프가 끝나는 셀 열 L에있는 항목이 비어 있습니다.

편집 : Do Until -- LoopFor row=2 To lastRow -- Next row으로 바꿀 수도 있습니다. 데이터의 마지막 행을 확인하려면 여러 가지 방법이 있습니다.이 링크 Excel-VBA find last row을 확인하거나 검색 기능을 사용하십시오.

0

당신은 당신의 시트에 마지막 비어 있지 않은 라인의 수를 얻기 위해이 코드 조각을 사용할 수 있습니다

Dim LastDataLine As Long 
LastDataLine = Sheets("Master Sheet").Range("A" & Rows.Count).End(xlUp).Row 

을 그리고 (단지 경우) 마지막 비어 있지 않은 열의 :

Dim LastDataCol As Integer 
LastDataCol = Sheets("Master Sheet").Cells(1, Columns.Count).End(xlToLeft).Column 

각 줄을 반복하는 루프를 구현하는 데 도움이 필요하면 의견을 남기십시오.

관련 문제