2013-07-21 2 views
0

IF 문을 사용하여 데이터를 추출하고 데이터 행을 스캔하고 데이터가 있으면 해당 데이터와 모든 관련 데이터를 복사합니다 .VBA 빈 복사 할 때 데이터를 상쇄하는 셀

내 현재 계획이

  1. 하면 셀 X는 데이터가 데이터와 모든 관련 데이터가 최신 기입 한 후 시트를 마스터한다는 복사가됩니다. 그런 다음 아래 줄에 가서 똑같이하십시오.
  2. 전체 매크로를 특정 열만큼 오프셋합니다 (추출 할 데이터가 몇 개월 단위이므로 분기 별 열이 어렵습니다)
  3. 마스터 시트 다음의 모든 탭에서 데이터를 취하는 매크로를 만듭니다 첫 번째 워크 시트 탭이 아닌 탭.

여기 내 엑셀 파일입니다. 만약 거기에 stackoverflow에 업로드 할 수있는 장소가 확실하지만 여기에 공간을 보내고있다. 이것은 내 데이터를 가져 오는 정확한 형식입니다. 이것은 60 개 이상의 데이터 탭을 포함하는 훨씬 더 큰 작업 파일의 작은 부분입니다. http://www.sendspace.com/file/3irz5n

여기까지는 작동하지 않는 코드입니다. 나는 구문의 일부를 잘못 생각합니다.

편집 : 몇 가지 문제가 수정되었습니다. 이 문제를 제외하고는 코드가 제대로 실행됩니다.

다음은 현재 코드입니다. 원본 데이터에서 빈 셀에 문제가 있습니다. 빈 셀이 있으면 아무 것도 복사하지 않고 내 마스터 시트에서 내 데이터를 상쇄합니다. 예를 들어 A1 열의 데이터가 200이면 A2는 300입니다. B1에 공백이 있기 때문에 B2에 있다고 가정하는 데이터는 B1로 이동합니다. 문제 코드는 '셀을 마스터 시트로 복사하십시오.

Sub Test() 

Dim imaxrow As Double 
Dim ws As Worksheet 

For Each ws In Worksheets 
    'Need to find a way to take data from sheets AFTER macro test sheet 
    If ws.Name <> "Macro Test Sheet" Then 
    'Rows of data to be extracted 
    imaxrow = 22 'Max rows 
    'Use to offset columns to next dataset 
     For Each E In Array(0, 11) 
     'Starting row to copy data 
     For iRow = 10 To imaxrow 
      If ws.Cells(iRow, 21).Value = "" Then 
       'Nothing in this cell. 
       'Do nothing. 
       Else 
       ' Copy Cell data to mastersheet 
       ws.Cells(iRow, 21 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "F").End(xlUp).Offset(1, 0) 
       ws.Cells(iRow, 22 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "G").End(xlUp).Offset(1, 0) 
       ws.Cells(iRow, 23 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "H").End(xlUp).Offset(1, 0) 
       ws.Cells(iRow, 24 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "I").End(xlUp).Offset(1, 0) 
       ws.Cells(iRow, 4).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "C").End(xlUp).Offset(1, 0) 
       ws.Cells(iRow, 3).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "B").End(xlUp).Offset(1, 0) 
       ws.Cells(5, 1).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
       ws.Cells(6, 21 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "D").End(xlUp).Offset(1, 0) 
       ws.Cells(7, 21 + E).Copy Destination:=Worksheets("macro test sheet").Cells(Rows.Count, "E").End(xlUp).Offset(1, 0) 
      End If 
     Next iRow 
     Next E 
    End If 
    Next ws 

End Sub 

도움 및 팁에 대해 다시 한 번 감사드립니다.

답변

0

"구문 오류가 있다고 생각합니다."도움이되지 않습니다. 수신 한 오류 메시지와이 오류가 나타내는 행을 알려 주셔야합니다.

는 그러나 이것은 아마도 잘못 : 셀 주소를 포함하는 일

WS.Range(.Cells(10, 7)) 

.Cells(10, 7)하지 않는 한.

추가 지원이 필요하면 특정 질문을하셔야합니다. 추가

If Cells(10, 7) = "" Then 

나는 그렇지 않으면 현재 ActiveSheet 무엇이든 찾고있다,이 때문에이 또한 점으로 선행되어야한다 "매크로 테스트 시트"에보고해야 가정합니다.

+0

코드는 오류없이 실행되지만 마스터 시트에 정보가 입력되지 않습니다. 내가 원한 것은 정보 및 기타 관련 정보를 추출하여 특정 롤에있는 마스터 시트에 붙여 넣으면 셀 10,7에 정보가 있는지 확인하는 것입니다. – Reccax