2017-04-20 1 views
0

"대상"통합 문서의 맨 위 셀이 일치 할 때 하나의 통합 문서에서 다른 통합 문서로 값을 붙여 넣으려고합니다. 워크 시트의 이름Excel VBA 워크 시트 이름을 셀 값과 일치시킨 다음 셀 범위 복사 및 붙여 넣기 방법

하지만 대부분의 경우 오류 1004가 발생합니다. 어떤 아이디어?

Sub Cycle() 

Dim ws As Worksheet 
Dim y As Integer 

For Each ws In ThisWorkbook.Sheets 
      ActiveSheet.Name = Worksheets("Target").Cells(1, y) 
      Worksheets("Target").Range(Cells(2, y), Cells(24, y)).Copy 
      Selection.Copy 
      ActiveSheet.Range("e3").Paste 
      Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
      :=False, Transpose:=False 

      y = y + 1 


     Next ws 

End Sub 
+0

Excel에는 열 0이 없으므로 'y'가 0 일 때'셀 (1, y)'이 작동하지 않습니다. 'y'를 1로 초기화하면 충돌이 발생하지 않지만, 당신의 코드가 당신이 생각하는대로하고 있다고 생각하세요.) – YowE3K

+0

직장에서는 작동하지 않습니다. 값을 복사하여 같은 타겟 시트에 붙여 넣기 만합니다. 실제로는 타겟의 다른 열에 값을 넣기를 원합니다. 여러 장의 워크 시트에 복사 할 시트 – user7892858

답변

0

내가 당신이 원하는 정확히 이해하지만이 시도 주면되지 확신 : 그것은 그렇게 할 수있는 가장 좋은 방법이 아니다

Sub Cycle() 

Dim ws As Worksheet 
Dim wsTarg As Worksheet: Set wsTarg = Worksheets("Target") 
Dim y As Integer 

For Each ws In ThisWorkbook.Sheets 
    y = 1 
    While (wsTarg.Cells(1, y) <> vbNullString) 
     If ws.Name = wsTarg.Cells(1, y) Then 
      wsTarg.Range(wsTarg.Cells(3, y), wsTarg.Cells(25, y)).Value = _ 
       ws.Range(ws.Cells(1, 1), ws.Cells(23, 1)).Value 
     End If 
     y = y + 1 
    Wend 
Next ws 
End Sub 

을 (우리가 확인하는 열을 피하기 위해 최적화 수있는 이미 복사되어 대상 스프레드 시트를 확인하지는 않지만) 모든 워크 시트를 찾아 대상 시트의 첫 번째 줄에있는 모든 셀과 비교합니다. 시트의 이름이 셀 이름과 정확히 일치하면 첫 번째 열 (셀 1 ~ 23)이 셀 3 ~ 25의 대상 시트로 복사됩니다.

이 정보가 도움이되기를 바랍니다.

+0

친애하는 브루노, 신속한 회신에 감사드립니다. 복사 된 셀은 워크 시트에 붙여 넣지 않습니다. 셀이 복사되어 동일한 "대상"시트에 붙여 넣기되었습니다. 최종적으로 "대상"시트와 함께 동일한 파일의 50 장 정도를 Excel 파일에 저장합니다. 어떻게 고칠 수 있겠 니? – user7892858

+0

오, 이제 알았습니다. 당신은 정확하게 그 oposite를하고 싶습니다. "대상"시트에서 다른 시트로 복사하십시오! 이 줄을 반전하기 만하면됩니다. ws.Range (ws.Cells (1, 1), ws.Cells (23,1)). 값 = wsTarg.Range (wsTarg.Cells (3, y), wsTarg.Cells (25, y)). Value' 우리가 프로세스를 뒤집 으면서, 모든 코드를 뒤집는 것이 더 좋은 방법일지도 모른다. 더 빨라질 것입니다. 이 작업을 대규모로 수행해야하는 경우 알려 주시면 개선 할 수 있도록 조치하겠습니다. :) –

관련 문제