2015-07-20 31 views
0

我发现了很多删除一维数组重复的方法,但找不到二维的例子。 除此之外,我想知道功能是否可以“离开”重复项目的一个实例,而不是全部删除它们。删除VBA中的二维数组的副本

是否可以做到这一点?

实施例:

Sub Tests() 

Dim Example() 

Example(0,0) = "Apple" 
Example(1,0) = "Apple" 
Example(0,1) = "Pear" 
Example(1,1) = "Orange" 

End Sub 

剩余项目将是:Apple, Pear and Orange

+0

当你说重复的时候,你的意思是整行是相同的还是只是重复的?如果行或列不一定相同,那么为什么你使用2d数组作为这个数据? – Evan

+0

因为它们相互对应,就像Array(Apple,redcolor) – AndroidDev

回答

0

这就是我喜欢这样做,使用单独的数组来保存独特的项目。这可以防止您的循环在尝试测试它们时必须循环通过非唯一的项目。

Sub Test() 

Dim Example(1, 1) As String 
Dim NoDups() As String 
Dim I, II, III As Long 

ReDim NoDups(UBound(Example, 1) * UBound(Example, 2)) 

For I = 0 To UBound(Example, 1) 
    For II = 0 To UBound(Example, 2) 
     For III = 0 To UBound(NoDups) 
      If NoDups(III) = Example(I, II) Then 
       Exit For 
      ElseIf NoDups(III) = "" Then 
       NoDups(III) = Example(I, II) 
       Exit For 
      End If 
     Next 
    Next 
Next 


End Sub 
0

要通过2D阵列工作,做,你会与一维数组,但与内部的“宽度”环中的'高度'循环。

即:

for a = 1 to number_of_elements_in_first_dimension 
    for y = 1 to number_of_elements_in_second_dimension 
     initial_comparison_string = array(a,b) 
     for x = a to number_of_elements_in_first_dimension 
      for y = b + 1 to number_of_elements_in_second_dimension 
       if Initial_comparison_string = array(x,y) then array(x,y) = "" 
      next y 
     next x 

    next b 
next a 

这将具有非常大的二维数组,运行很慢,但我认为你必须做2个嵌套循环像这样把每个值并将其与每个值稍后出现。