2017-05-18 2 views
1

다음 데이터 세트가 있습니다. 중복 된 데이터가 있습니다. 내가 A2에서 열 A의 값을보고하는 매크로를 만들려고하고VBA - 중복 된 시트를 추가하고 출력을 행에 집계합니다.

values: 
2880CR-20.36KX53305DECOAK2015 
F05572-CN48517OCTOAK2016 
F05572-CN48517DECOAK2016 
F05572-CN48517NOVOAK2015 
F05572-CN48517NOVOAK2015(duplicate) 
F05572-CN48517DECOAK2015 
F05573-CN48517JANOAK2016 
F05573-CN48517FEBOAK2016 
F05573-CN48517JANOAK2015 
F05573-CN48517FEBOAK2015 
F05573-CN48517MAROAK2015 
F05573-CN48517APROAK2015 
F05573-CN48517APROAK2015(duplicate) 

: A (열에서 행의 수를) 및 문자열에 포함 된 중복 값의 목록을 반환은 "선언 strMyDupList ". 기본적으로 적어도 하나의 중복이있는 경우 msgbox가 열리고 새 시트가 열 주소 및 값으로 생성되며 시트 전체에 걸쳐 가로로 쉼표 대신에 쉼표로 구분 된 모든 값을 나열하려고합니다. 그래서 같은 :

Address  value 
$A$5  F05572-CN48517NOVOAK2015 
$A$13  F05573-CN48517APROAK2015 

내 코드는 다음과 같습니다

If strMyDupList <> "" Then 
    MsgBox "The following entries have been used more than once:" & vbNewLine & strMyDupList 

    Worksheets.Add.name = name 
    Worksheets(name).Range("A1").Value = "Location" 
    Worksheets(name).Range("B1").Value = "Value" 
' Worksheets(name).Range("A2:C2").Value = Split(strMyDupList, ",") 
    Worksheets(name).Range("B4:B6") = Split(Application.WorksheetFunction.Transpose(strMyDupList), ",") 

결과는이 코드로, 그러나, 수직 수평에서 tranposed 값을 얻을 수 오전 있으며,이 경우에만 FIRST를 반환 문자열 값 목록에서 VALUE, 그래서 돌아 오는 것은 :

Address  value 
$A$5  F05572-CN48517NOVOAK2015 
$A$5  F05572-CN48517NOVOAK2015 (should be F05573-CN48517APROAK2015) 

나는 UBoundResize과 함께 일할 수있는 본 적이 있지만 구문이 작동하거나 어떻게 아무 생각이 사용되었습니다. 누군가가 도와 줄 수 있습니까?

고맙습니다.

답변

0

다음은 중복 된 정보를 남겨 두는 완전한 예입니다.

본질적으로 모든 정보를 정렬합니다. 따라서 정렬 할 때 연속 값을 얻습니다. 연속 값은 속임수 경우 자체가됩니다.

.NET 기능 (System.Collections.ArrayList)이 2.0 & 인 3.5이므로 컴퓨터에 설치해야합니다. 보통은 이미 있지만 그렇지 않을 수도 있습니다. 당신은 Programs & Features을 통해 그것을 켤 수 있습니다.

Sub StringArrayDupeChecker() 
    Dim var As Variant 
    Dim holder As String 
    Dim strMyList() As String 
    Dim myDupeData As Variant 
    Dim str As String 

    str = "one,two,three,three,three,four,five,five" 
    strMyList = Split(str, ",") 

    holder = "" 
    Set var = CreateObject("System.Collections.ArrayList") 
    Set myDupeData = CreateObject("System.Collections.ArrayList") 

    For Each i In strMyList 
     var.Add (i) 
    Next i 

    var.Sort 

    For Each j In var 
     If Not j = holder Then 
      'do your stuff 
      str = "notDupe" 
     Else 
      myDupeData.Add(j) 
     End If 
     holder = j 
    Next j 
End Sub 
+0

답장을 보내 주셔서 감사합니다. 그러나 중복 된 데이터는 남기지 않으려 고합니다. 오히려, 나는 중복을 식별하려고 노력하고있다. 그래서 나는 왜 다른 데이터 세트와 상호 참조 할 수 있는가? 이 매크로를 사용하면 더 쉽게 사용할 수 있습니다. –

+0

물론, 내 업데이트 된 코드를 참조하십시오. 간단한 변화. ArrayList 매우 강력하고 이상한 그들이 그것을 비난하는 방법입니다. 나는 또한 어쩌면 당신이 목록 및 Linq에 액세스 할 수있는 C#으로 추가 기능으로 이동하는 것이 좋습니다 것이 훨씬 쉬웠을 것입니다. 비록 내가 전체 코드베이스와 교육용 devs를 옮기는 것이 완전히 다른 문제라는 것을 이해하지만. – GibralterTop

관련 문제