2017-05-18 8 views
1

重複を含む次のデータセットがあります。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) 

私はA2から、列Aの値を見ていきますマクロを作成しようとしています:(列内の行数)を、文字列に含まれる重複する値のリストを返すには "宣言しましたstrMyDupList "である。基本的に、少なくとも1つの重複がある場合、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), ",") 

結果は、私は水平から垂直に転置値を得ることができると思っている、しかし、このコードで、それだけでFIRSTを返しています文字列内の値のリストの値なので、それが戻っていますが:

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は非常に強力で、奇妙な方法を彼らはそれを非難しました。私はおそらくあなたがListsとLinqにアクセスできるC#でアドインに移動することをお勧めします。これはずっと簡単でした。私があなたのコードベース全体を動かすこととdevsを訓練することが全く異なる問題だと私は理解していますが。 – GibralterTop

関連する問題