2017-03-21 7 views
2

나는 두 장을 1로 설정합니다. 이 코드는 제대로 작동하지고급 필터를 사용하여 고유 값 가져 오기 작동하지 않습니까?</p> <p>시트 : 2 :</p> <pre><code>Column C Supplier Name A A B B C </code></pre> <p>시트 1 (원하는 결과)</p> <pre><code>Column G A B C </code></pre> <p>나는 시트에 열 G의 고유 한 공급 업체 이름 목록을 만들려고하고

Sub LIST() 
    Dim r1 As Range, r2 As Range 

    Dim lastrow As Long 
    lastrow = Sheets("Data").Cells(Rows.Count, "C").End(xlUp).row 

    Set r1 = Sheets("Data").Range("C2:C" & lastrow) 
    Set r2 = Sheets("Sheet1").Range("G16") 

    r1.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=r2, unique:=True 



End Sub 

:

이 코드를 사용하고 있습니다. 과 같이 중복으로는 최초의 공급 업체 이름 A를 보여줍니다 고급 필터가 작동하는 복사에 걸쳐 실시하는 헤더 행을 요구 한

Column G 
A 
A 
B 
C 

답변

1

시트. 당신이 하나를 포함시키지 않았거나 포함하지 않았기 때문에, r1.AdvancedFilter 명령은 C2가 헤더 행이라고 가정합니다.

변경하십시오. Range("C2:C" & lastrow)에서 Range("C1:C" & lastrow)으로 변경하면 고급 필터에 전달할 헤더 행이 있습니다.

Sub LIST() 
    Dim r1 As Range, r2 As Range 

    Dim lastrow As Long 
    lastrow = Sheets("Data").Cells(Rows.Count, "C").End(xlUp).Row 

    Set r1 = Sheets("Data").Range("C1:C" & lastrow) 
    Set r2 = Sheets("Sheet1").Range("G16") 

    r1.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=r2, Unique:=True 

End Sub 

C1을 Sheet1! G16으로 전송한다는 점에 유의하십시오. 원하는 경우 삭제하십시오.

직접 값 전송으로 대체하고 AdvancedFilter 대신 RemoveDuplicates를 사용하십시오.

Sub nodupeLIST() 
    Dim r1 As Range, lastrow As Long 

    With Worksheets("Data") 
     lastrow = .Cells(Rows.Count, "C").End(xlUp).Row 
     Set r1 = .Range("C2:C" & lastrow) 
    End With 

    With Worksheets("Sheet1") 
     With .Range("G16").Resize(r1.Rows.Count, 1) 
      .Cells = r1.Value 
      .RemoveDuplicates Columns:=1, Header:=xlNo 
     End With 
    End With 

End Sub 
+0

내 머리글 행을 가로 질러 복사하지 않으려면 어떻게해야합니까? – user7415328

+1

헤더 행을 포함하지 않는 고급 필터 또는 자동 필터가 없습니다. G16에서 삭제하거나 고유 키 사전을 작성하고 키 배열을 G16으로 전송하십시오. 아마 전체를 복사하고 RemoveDuplicates. 다른 대안이 있습니다. – Jeeped