VBA - 添加带有重复项的工作表并将输出转移到行

时间:2017-05-18 19:48:31

标签: excel vba excel-vba duplicates transpose

我有以下数据集,其中包含重复项。

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列中的值,来自A2:A(列中的行数),并返回包含在声明的字符串中的重复值的列表" strMyDupList& #34 ;.基本上,如果至少有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 VALUE,因此它返回:

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

我已经看到UBound Resize可以正常工作,但我不知道语法如何工作或使用。有人可以帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:0)

以下是如何从您的信息中删除重复项的完整示例。

基本上,它会对您的所有信息进行排序。因此,当你对它进行排序时,如果它是一个骗局,你将获得连续的值。

它使用.NET功能System.Collections.ArrayList,它位于2.0&amp; 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