2016-11-04 1 views
0

저는 VBA에 비교적 익숙하지 않으며 서서히 배우고 있습니다. 문자열을 찾은 다음 특정 열의 다른 워크 시트에 복사하여 붙여 넣기

내가

내 첫 번째 워크 시트에 열 C에 단어 PASS을 찾아, 다음도 PASS라고 보조 워크 시트에 전체 행을 복사합니다 아주 기본적인 매크로가 있습니다.

해당 행의 데이터를 복사하여 A:E 열에 붙여 넣으려고합니다. 아래는 현재 코드입니다. .range("A:E")을 추가하려고 시도했지만 아무 것도 수행하지 않습니다.

해당 행에 대한 A-E 열에있는 정보 만 복사하는 방법에 대한 도움이 있으면 크게 감사하겠습니다.

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim C As Range 

    If Intersect(Target, Me.Range("C:C")) Is Nothing Then Exit Sub 
    For Each C In Intersect(Target, Me.Range("C:C")).Cells 
    If C.Text = "PASS" Then 
     C.EntireRow.Copy Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Offset(1).EntireRow 
    End If 
    Next 
End Sub 
+0

당신은 범위를 참조 할 때 행 번호뿐만 아니라 열을 지정해야합니다. range ("A : E")'는 열만 지정합니다. 'range ("a54 : e54")와 같을 필요가 있습니다. –

+0

@Scott Marcus - 효율적이지는 않지만 전체 열을 참조 할 수 있습니다. – SJR

답변

0

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim C As Range 

    If Intersect(Target, Me.Range("C:C")) Is Nothing Then Exit Sub 
    For Each C In Intersect(Target, Me.Range("C:C")).Cells 
    If C.Text = "PASS" Then 
     cells(C.Row,1).resize(,5).Copy Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Offset(1).EntireRow 
    End If 
    Next 
End Sub 
+0

완벽하게 작동합니다. 정말 고맙습니다! –

1

내가 적응 한 코드를 시도하고 다음과 같은 변화 : 변화가 있었다 경우 간단한 코드

  • 을 유지하기 위해

    • 정의 일부 Range 변수 C 열 다음에 Target 셀은 우리에게 행을 제공합니다.
    • 마지막 행을 받고함으로써 PASS 시트의 목표 행을 찾을 수 + 1
    • E
    • Target의 행하지만 열 A를 사용하여 복사 할 데이터를 정의하는 대상 범위의 첫 번째 셀을 얻을 다음을 여기 코드는

    복사 :

    Private Sub Worksheet_Change(ByVal Target As Range) 
    
        Dim rngSource As Range 
        Dim lngTargetRow As Long 
        Dim rngTarget As Range 
    
        'was change in column C ? 
        If Intersect(Target, Me.Range("C:C")) Is Nothing Then 
         Exit Sub 
        End If 
    
        'change was in column C - was PASS entered 
        If Target.Text = "PASS" Then 
         'get row to copy to on PASS sheet 
         lngTargetRow = Worksheets("PASS").Cells(Rows.Count, "C").End(xlUp).Row + 1 
         'get source range 
         Set rngSource = Me.Range("A" & Target.Row & ":E" & Target.Row) 
         'set target range 
         Set rngTarget = Worksheets("PASS").Cells(lngTargetRow, 1) 
         'do the copy 
         rngSource.Copy Destination:=rngTarget 
        End If 
    
    End Sub 
    
  • +0

    도움 주셔서 감사합니다. 이것은 또한 작동합니다! SJR의 첫 번째 답변은 새내기가 더 이해하기 쉽고 코드를 읽고 이해할 수 있기 때문에 진행될 것입니다. 이것은 내 매크로의 일부분이므로 가능한 한 기본으로 유지하려고합니다. –

    관련 문제