从2D阵列删除重复和在VBA

问题描述:

更新它我有一个二维数组保持值如下所示:从2D阵列删除重复和在VBA

阵列 - JK(K,NC)

“K” 商店总计没有项目 的“ NC“商店项目

我需要从”NC“ 删除重复项,并删除重复项后更新”K“(即总项目)。

- 5,6,7,
- 7,6,9,10,11,
- 8,7,15,
- 12,15,16,12 ,17,18,19,20,16
- 26,27,
- 20,19,
- 21,33,,34,35,
- 19,33,34,18,38,39,40,
- 39,40,38,43,
- 41,44,,45,46,
- 20,19,
- 21,33,,34 ,35,21
- 19,33,34,18,38,39,40,34

+1

什么是你的代码已经尝试过?重要性字符串中的值的顺序是什么? – Luuklag

+0

可能重复[VBA,从数组中删除重复](https://*.com/questions/11870095/vba-remove-duplicates-from-array) – Moosli

+0

@Moosli这个问题是不同的,因为它不想删除重复的数组条目,它想要从数组中删除重复的字符串。 – Luuklag

你可以使用一个函数,像这样

Function RemoveDupes(strInput As String) As Variant() 

' Uses Microsoft Scripting Runtime referece 

Dim arrSplit() As String 
Dim lngCounter As Long 
Dim dicDupeCheck As New Scripting.dictionary 

arrSplit = Split(strInput, Chr(32)) 

For lngCounter = 0 To UBound(arrSplit) - 1 

    If Not dicDupeCheck.Exists(arrSplit(lngCounter)) Then 
     dicDupeCheck.Add arrSplit(lngCounter), arrSplit(lngCounter) 
    End If 

Next lngCounter 

RemoveDupes = Array(dicDupeCheck.Count, Join(dicDupeCheck.Items(), " ")) 

Erase arrSplit 

End Function 

这将被用来作为如下

RemoveDupes("12 15 16 12 17 18 19 20 16")(0)会给计数,并RemoveDupes("12 15 16 12 17 18 19 20 16")(1)会给非重复数据删除技术的输出。

或设置数组removedupes和使用,所以arr=RemoveDupes("12 15 16 12 17 18 19 20 16")然后OriginalArray(x)=arr(0) & " - " & arr(1)

这是基于来自@tigeravatar@Jeeped与你的项目和代码可能有一个解决方案发现这里对堆栈溢出,所以非常感谢对这个家伙。

Removing Duplicate values from a string in Visual Basic

Multidimensional Arrays with For Loops VBA

Sub Test() 
     Dim strArray(8, 1) As String 
     Dim newString As String 
     strArray(0, 0) = "4" 
     strArray(0, 1) = "5 6 7 5" 
     strArray(1, 0) = "6" 
     strArray(1, 1) = "7 6 9 10 11 7" 
     strArray(2, 0) = "4" 
     strArray(2, 1) = "8 7 15 8" 
     strArray(3, 0) = "9" 
     strArray(3, 1) = "12 15 16 12 17 18 19 20 16" 
     strArray(4, 0) = "4" 
     strArray(4, 1) = "5 6 7 5" 
     strArray(5, 0) = "6" 
     strArray(5, 1) = "7 6 9 10 11 7" 
     strArray(6, 0) = "9" 
     strArray(6, 1) = "12 15 16 12 17 18 19 20 16" 

     For i = 0 To UBound(strArray, 1) 
       newString = DeDupeString(strArray(i, 1), " ") 
       strArray(i, 0) = UBound(Split(newString, " ")) + 1 
       strArray(i, 1) = newString 
     Next i 
    End Sub 

    Function DeDupeString(ByVal sInput As String, Optional ByVal sDelimiter As String = ",") As String 
     Dim varSection As Variant 
     Dim sTemp As String 
     varSection = Split(sInput, sDelimiter) 
     For Each varSection In Split(sInput, sDelimiter) 
      If InStr(1, sDelimiter & sTemp & sDelimiter, sDelimiter & varSection & sDelimiter, vbTextCompare) = 0 Then 
       sTemp = sTemp & sDelimiter & varSection 
      End If 
     Next varSection 
     DeDupeString = Mid(sTemp, Len(sDelimiter) + 1) 
    End Function 
+0

好的解决方案。如果只有人自己学会谷歌;) – Luuklag

+0

@卢克拉格谢谢。对,是真的。 ^^ – Moosli