2013-09-25 4 views
0

Excel에서 매크로를 가져 오려고합니다.Excel VBA 하나의 워크 시트에서 다른 워크 시트로 루프로 일치 정보 복사

지금 당장 "Form"이라는 3 개의 열이있는 워크 시트가 있습니다 - 1 행의 제목은 A = 양식 번호, B = 양식 이름, C = 부품입니다. 또한 Ins이라는 워크 시트가 있습니다. 똑같은 표제와 이미 정보로 채워져있다.

"양식"열 A에 양식 번호를 입력하고 열 B와 C에 대한 정보를 자동으로 복사 할 수 있도록 가져 오려고합니다. 코드에서 지금 EntireRow가 있습니다. ,하지만 그것을 특별히 C에서 열 A로만 복사 할 수 있으면 선호 할 것이지만 어떻게 생각할 수는 없습니다.

Private Sub Auto() 

Application.ScreenUpdating = False 
Dim wks1 As Worksheet, wks2 As Worksheet 

Dim j As Integer 
Dim i As Integer 

Set wks1 = Sheets("Forms") 
Set wks2 = Sheets("Ins") 

lastline = wks1.UsedRange.Rows.Count 

For i = 2 To lastline 

wks2.Cells(1, 1).CurrentRegion.AutoFilter 
wks2.Cells(1, 1).CurrentRegion.AutoFilter 1, wks1.Cells(i, 1).Value 
wks2.Cells(1, 1).CurrentRegion.EntireRow.Copy wks1.Cells(i, 1) 
wks2.Cells(1, 1).CurrentRegion.AutoFilter 


Next i 


End Sub 
+0

'A'열에 'Form Name'을 입력하고 'B'와 'C'가 자동으로 채워지는 것을 알고 있습니다. *'나는 지금 EntireRow 코드를 가지고 있지만, 특별히 C 열에서 C 열까지만 복사 할 수 있으면 좋겠지 만, 어떻게 생각할 수 없습니까? "* 당신은 자세히 설명 할 수 있습니까? –

+2

워크 시트의 A 열에 각 양식의 인스턴스가 하나만 있습니까? 왜 VBA와 루프에서이 작업을 수행해야합니까? 왜 Vlookup이나 Index/Match를 사용하지 않는가? – user2140261

+0

Tim이 아래의 저를 위해 EntireRow 문제를 해결했습니다 ... 지금 내가 가지고있는 문제는 단지 헤더가 복사되고 있다는 것입니다. 레코드를 유지하기 위해 복사 된 값이 필요하기 때문에 Match를 사용할 수 없습니다. 때때로 ins의 값이 변경됩니다 – Amaress

답변

0
wks2.Cells(1, 1).CurrentRegion.Resize(,3).Copy wks1.Cells(i, 1) 

편집 :이 같은 내가 여기

Private Sub Auto() 

Application.ScreenUpdating = False 
Dim wks1 As Worksheet, wks2 As Worksheet 
Dim f As Range, frmNum 
Dim lastLine As Long 

Dim j As Integer 
Dim i As Integer 

Set wks1 = Sheets("Forms") 
Set wks2 = Sheets("Ins") 

lastLine = wks1.UsedRange.Rows.Count 

For i = 2 To lastLine 
    frmNum = wks1.Cells(i, 4).Value 
    If Len(frmNum) > 0 Then 
     Set f = wks2.Columns(1).Find(frmNum, LookIn:=xlValues, lookat:=xlWhole) 
     If Not f Is Nothing Then 
      f.Offset(0, 1).Resize(1, 9).Copy wks1.Cells(i, 5) 
     Else 
      wks1.Cells(i, 5).Value = "??" 
     End If 
    End If 
Next i 


End Sub 
+0

헤더를 반복해서 복사하지 않습니까? – user2140261

+0

질문을 자세히 읽지는 않았지만 OP가 자신이 원하는 것을 알고 있다고 가정했습니다 : EntireRow가 효과적 이었지만 전체 행을 복사하지 않고 첫 번째 3 열만 복사하면 내 대답은 바로 그 것입니다 ... –

+0

오버 헤드를 복사하는 헤더는 내가 가지고있는 문제 중 하나입니다. 그래도 내 EntireRow 문제가 해결되었습니다! 고맙습니다! – Amaress

0

내가 무엇을 의미하는지에 대한 생각 좋을 것이다 여기

내가 현재 사용하도록 노력하고있어 코드 내 의견에, 당신이 원하는 것을 원하는 경우 수식을 사용하여 수행 할 수 있습니다 :

수식은 다음과 같습니다.

B2 = =IF(A2<>"",VLOOKUP(A2,Ins!$A$1:$C$14,2,FALSE),"") 

C2 = =IF(A2<>"",VLOOKUP(A2,Ins!$A$1:$C$14,3,FALSE),"") 

당신이 만약 인 워크 시트는 다음과 같습니다

enter image description here

수식을 아래로 드래그 한 후 다음 당신은 워크 시트는 다음과 같이됩니다 양식 :

enter image description here

+0

복사가 필요할 때를 제외하고는 효과가 있습니다. 변수가 될 수 없다. – Amaress

0

세 번째 통합 문서를 추가하고 A 열에 양식 번호를 입력하면이 작업이 끝납니다!

Private Sub Auto() 

Application.ScreenUpdating = False 
Dim wks1 As Worksheet, wks2 As Worksheet 

Dim j As Integer 
Dim i As Integer 

Set wks1 = Sheets("Form Worksheet") 
Set wks2 = Sheets("Instructions") 
Set wks3 = Sheets("To Do") 

lastline = wks1.UsedRange.Rows.Count 

For i = 2 To lastline 

wks2.Cells(2, 1).CurrentRegion.AutoFilter 
wks2.Cells(2, 1).CurrentRegion.AutoFilter 1, wks3.Cells(i, 1).Value 
wks2.Cells(2, 1).CurrentRegion.Offset(1).Resize(, 10).Copy 
wks1.Cells(i, 4).PasteSpecial Paste:=xlPasteValues 
wks2.Cells(2, 1).CurrentRegion.AutoFilter 


Next i 


End Sub 

하지만 Tim 버전을 사용하여 끝났습니다.

고마워요!

관련 문제