2013-12-18 5 views
2

Excel에서 vba를 사용하여 매크로를 만듭니다. 모든 루프를 순환하고 조건에 맞는 특정 행을 새 워크 시트에 복사하는 for 루프가 있습니다. 현재, 매크로가 작동합니다. 같은 행 번호로 행을 복사했습니다. 그러나 이로 인해 공백 행이 존재하게되어 제거됩니다. 마지막으로 사용한 행 다음에 행을 복사하여 더 잘 수행 할 수있는 방법이 있습니까?워크 시트의 행을 새 워크 시트 끝으로 복사 Excel VBA

' Set the lastRow variable 
    lastRow = Worksheets("Original").Cells.Find("*", [A1], , , xlByRows, xlPrevious).ROW 

    ' The Total is in column K and the Class is in Column C 
    On Error Resume Next 
    For i = lastRow To 1 Step -1 
     ' Check the columns for Total and Class values 
     If (Worksheets("Original").Cells(i, "K").Value2) <> 0 Then 
      Worksheets("Original").Rows(i).Copy Worksheets("NEW WS").Cells(i, 1) 
      'Worksheets("Original").Rows(i).Copy Worksheets("NEW WS").Cells(Worksheets("NEW WS").Rows.Count, col).End(xlUp).ROW 
     ElseIf ((Worksheets("Original").Cells(i, "K").Value2) = 0) Then 
      If (Worksheets("Original").Cells(i, "C").Value2) < 81 Or (Worksheets("Original").Cells(i, "C").Value2) > 99 Then 
       Worksheets("Original").Rows(i).Copy Worksheets("NEW WS").Cells(i, 1) 
       'Worksheets("Original").Rows(i).Copy Worksheets("NEW WS").Cells(Worksheets("NEW WS").Rows.Count, col).End(xlUp).ROW 
      End If 
     End If 
    Next i 
Worksheets("NEW WS").Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete 

주석 처리 된 줄 : Worksheets("Original").Rows(i).Copy Worksheets("NEW WS").Cells(Worksheets("NEW WS").Rows.Count, col).End(xlUp).ROW

이 작동하지 마십시오

여기 내 코드입니다. 왜 그런지 모르겠습니다. 이 코드를 사용하려고하면 Excel에서 원본 워크 시트의 내용을 새 워크 시트로 전혀 복사하지 않습니다. 어떻게 작동시킬 수 있습니까?

Worksheets("Original").Rows(i).EntireRow.Copy Worksheets("NEW WS").Range("A" & CStr(newLastRow + 1)).EntireRow하는 작업을해야 :

+0

당신이 데이터를 새로운 시트의 마지막 행을 찾으 1을 추가 한 다음 복사해야합니다. 마지막 행을 찾으려면 [this] (http://stackoverflow.com/questions/11169445/error-finding-last-used-cell-in-vba)를 참조하십시오. –

답변

3

, 볼이

검증되지 않은

Option Explicit 

Sub sample() 
    Dim wsO As Worksheet, wsI As Worksheet 
    Dim wsOLRow As Long, wsILRow As Long 

    Set wsO = ThisWorkbook.Worksheets("NEW WS") 
    Set wsI = ThisWorkbook.Worksheets("Original") 

    With wsO 
     If Application.WorksheetFunction.CountA(.Cells) <> 0 Then 
      wsOLRow = .Cells.Find(What:="*", _ 
          After:=.Range("A1"), _ 
          Lookat:=xlPart, _ 
          LookIn:=xlFormulas, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlPrevious, _ 
          MatchCase:=False).Row + 1 
     Else 
      wsOLRow = 1 
     End If 
    End With 

    With wsI 
     wsILRow = .Range("A" & .Rows.Count).End(xlUp).Row 
     For i = 1 To wsILRow 
      If .Cells(i, "K").Value2 <> 0 Then 
       .Rows(i).Copy wsO.Rows(wsOLRow) 
       wsOLRow = wsOLRow + 1 
      ElseIf .Cells(i, "K").Value2 = 0 Then 
       If .Cells(i, "C").Value2 < 81 Or .Cells(i, "C").Value2 > 99 Then 
        .Rows(i).Copy wsO.Rows(wsOLRow) 
        wsOLRow = wsOLRow + 1 
       End If 
      End If 

     Next i 
    End With 
End Sub 
+0

이 작업은 내가 원하는 모든 것을 복사하지만 여전히 빈 행을 포함합니다. – RXC

+0

@RXC : 사과드립니다. 코드를 업데이트했습니다. 이제 시험해보십시오 –

+0

이제 작동 중입니다. 고맙습니다! – RXC

2

Worksheets("NEW WS").Cells(Worksheets("NEW WS").Rows.Count, col).End(xlUp).ROW는 - 그럼 newLastRow = Worksheets("NEW WS").Cells(Worksheets("NEW WS").Rows.Count, col).End(xlUp).ROW

당신이 붙여 넣기를 복사 할 때 - 숫자가 아닌 복사 한 행

붙여 넣기 할 위치 그것을 위해 새로운 변수를 만들고 반환 또는 어쩌면 .EntireRow이 미안을 시험 할 기회가 없다.

내 의견에 더
+0

'.EntireRow'는 아무런 영향을 미치지 않습니다. 여전히 행을 복사하지만 Excel은 모든 행을 첫 행에 복사합니다. 루프의 시작 부분에 newLastRow 변수를 매 반복마다 할당합니다. – RXC

관련 문제