2015-01-12 7 views
0

두 개의 스프레드 시트가 있습니다. 첫 번째 스프레드 시트에는 부품 번호와 설명이 같은 열에 있지만 연속적인 행에 있습니다. 먼저 부품 번호와 설명을 첫 번째 스프레드 시트에서 가져 와서 두 번째 스프레드 시트에이 부품을 바꿔서 (값만, 형식이 없음) 부품 번호와 설명이 행 대신 연속 열에 있어야합니다. 이 작업을 돕기 위해 Worksheet_Change() 함수에 다음 VBA 코드를 추가했습니다.Excel Transpose 중복 항목 제거

If Not Application.Intersect(Target, MatNumDesc) Is Nothing Then 

    If Application.CutCopyMode = xlCopy Then 

     Application.Undo 
     Target.PasteSpecial Paste:=xlPasteValues, Transpose:=True 

    End If 

End If 

MatNumDesc는 부품 번호에 붙여 넣을 셀 범위입니다. 내가 2 + 소재 및 설명이 모두 잘 작동하는 경우 내 문제는 오직 하나의 재료와 설명입니다. 이 경우 중복되지 않는 항목이있어서 원하지 않습니다.

분명히하기 위해 별도의 파일 인 두 스프레드 시트간에 값을 수동으로 복사하여 붙여 넣습니다 (Ctrl-C 및 Ctrl-V 사용). 나는 VBA 코드를 사용하여 하나의 시트에서 다른 시트로 복사하려고 시도하지는 않습니다. 왜냐하면 그럴 가치가없는 이유는 제 설정대로 작동하지 않기 때문입니다.

또한 내가 관찰 할 수 있었던 것부터 내가 직면하고있는 실제 문제는 기본 Excel 동작과 관련이 있습니다. 복사 한 것은 2 행 1 열의 데이터입니다. 옮겨 놓으면 2 열 1 행이되지만 .Application.Undo 작업이 실행 된 후 2 행 2 열이 선택되어 Excel에서 .PasteSpecial 작업을 실행합니다. 적어도 내가 관찰 할 수 있었던 것에서.

+0

나는 "Target.PasteSpecial"을'.Range ("G"& Target.Row) .PasteSpecial'로 바꾸려고 노력했다. 그것은 지금까지 일하는 것 같다. – Aerogems

답변

0

몇 가지 테스트를 마친 후 적어도 해결책을 찾았습니다. Excel에서 정의한 Target 대신 명시 적 범위를 지정해야합니다. 초기 코드의 수정 된 버전은 다음과 같습니다.

If Not Application.Intersect(Target, MatNumDesc) Is Nothing Then 

    If Application.CutCopyMode = xlCopy Then 

     Application.Undo 
     ThisWorkbook.Sheets("Sheet1").Range("G" & Target.Row).PasteSpecial Paste:=xlPasteValues, Transpose:=True 

    End If 

End If 

이 예에서는 "G"열을 사용하지만 다른 열로 바꿀 수 있습니다.

0

제공 한 코드의 일부로 디버깅하기가 다소 어려우나 Worksheet_Change 이벤트 매크로 내에서 값을 변경하는 표준 연습은 .EnableEvents을 일시적으로 사용 중지하여 하위 이벤트가 트리거되지 않도록합니다. 어디에서 스스로를 실행하려고합니다.

If Not Application.Intersect(Target, MatNumDesc) Is Nothing Then 
    If Application.CutCopyMode = xlCopy Then 
     on error goto Fìn 
     application.enableevents = false ' turn off event handling 
     Application.Undo 
     Target.PasteSpecial Paste:=xlPasteValues, Transpose:=True 
    End If 
End If 
Fìn: 
application.enableevents = true 'remember to turn it back on before exiting the sub 
+0

이미'.EnableEvents'와'.ScreenUpdating' 두가지를 모두 가지고 있습니다. '.EnableEvents'가 false로 설정되지 않았다면 Excel이 충돌하지 않거나 비슷할 것입니다. 단 하나의 부품 번호와 설명 쌍이있을 때 불필요한 중복 값을 얻습니다. – Aerogems