我有以下数据集,其中包含重复项。
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
可以正常工作,但我不知道语法如何工作或使用。有人可以帮忙吗?
谢谢
答案 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