2017-05-18 2 views
1

Ich habe folgenden Datensatz, der Duplikate enthält.VBA - Hinzufügen eines Blattes mit Duplikaten und Transponieren der Ausgabe in Zeilen

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) 

ich ein Makro zu erstellen Ich versuche, die auf den Werten in der Spalte A aussehen wird, von A2: A (Anzahl der Zeilen in der Spalte) und schicken Sie eine Liste der doppelten Werte in der Zeichenfolge enthalten deklariert " strMyDupList ". Grundsätzlich, wenn es mindestens 1 Duplikat gibt, wird die msgbox angezeigt und das neue Blatt mit den Spalten Adresse und Werte erstellt und ich versuche, alle Werte getrennt ein Komma VERTICALLY, anstatt horizontal über das Blatt. so wie:

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

mein Code:

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), ",") 

Die Ergebnisse sind, dass ich in der Lage bin, die Werte von horizontal auf vertikal tranposed zu bekommen, aber mit diesem Code, nur ist die erste Rückkehr VALUE in der Liste der Werte in der Zeichenfolge, so dass es zurückzuschicken:

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

ich habe die UBound mit Resize arbeiten konnte gesehen, aber ich habe keine Ahnung, wie die Syntax funktioniert oder benutzt. Kann jemand helfen?

Danke

Antwort

0

das komplette Beispiel dafür, wie aus Ihren Informationen Duplikate zu verlassen.

Im Wesentlichen sortiert es alle Ihre Informationen. Wenn Sie also sortieren, erhalten Sie den fortlaufenden Wert, der selbst wäre, wenn es ein Betrogener wäre.

Es verwendet eine .NET-Funktion, System.Collections.ArrayList, die in 2.0 & 3.5 war, so dass auf Ihrem Computer installiert werden muss. Normalerweise ist es schon, aber es kann nicht sein. Sie können es über Programs & Features einschalten.

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

Danke für die Antwort, aber ich versuche nicht, Duplikate aus den Daten zu lassen. Ich versuche vielmehr, die Duplikate zu identifizieren, damit ich mit den anderen Datensätzen einen Bezug herstellen kann. Mit diesem Makro sollte es einfacher werden. –

+0

Natürlich, siehe meinen aktualisierten Code. Eine einfache Änderung. ArrayList ist sehr mächtig, seltsam, wie sie es veraltet haben. Ich würde auch empfehlen, vielleicht zu Add-Ins mit C# zu wechseln, wo Sie Zugriff auf Listen und Linq haben und das wäre viel einfacher gewesen. Obwohl ich verstehe, dass das Verschieben der gesamten Code-Basis und der Trainings-Devs ein ganz anderes Problem ist. – GibralterTop

Verwandte Themen