VBA阵列单元格值重复问题

时间:2014-07-20 18:35:10

标签: arrays excel vba

几个星期以来,我一直在努力解决同样的问题。我认为现在是网络专业人士的时间:

Dim txt, show As String
Dim NameList(1 to 50) as Varriant
Dim i, j, t As Integer
t = 1
For i = 1 To 10
  For j = 1 To 5
    NameList(t) = Sheets("Sheet2").Cells(i, j).Value
    nshow = nshow & i & " " & t & " " & NameList(t) & vbCrLf
    t = t + 1
  Next j     
Next i
MsgBox nshow

这是将所有以下数据放入数组的代码(见图片): enter image description here

我跑完后得到以下内容:

enter image description here

我认为我在数组中得到以下单元格值: NameList(a 8,k 2,u 2,e 2,o 2等等)

我的问题是如何清理我的数组,使它们不重复(超过1个相同的值)。我想拥有 NameList(a 8,k 2,u 2,e 2,x 11,c 1,m 1,d 2,r 1,o 2,y 1,i 1,f 1,p 1,z 1,g 2, q 2,h 1,b 2,l 1,v 1,j 1,t 2,n 1)没有重复数据。

我想感谢,帮助!

2 个答案:

答案 0 :(得分:0)

您应该在脚本中添加以下代码行:

If InStr(nshow, Sheets("Sheet2").Cells(i, j).Value) = 0 Then
End If

这里的InStr函数基本上检查当前的迭代值是否已经在nshow数组中。

如果是 - 它什么都不做,如果没有(函数返回0) - 它允许运行内部代码块,结果是新值被添加到nshow数组中。

最后,您的代码应如下所示:

Dim txt, show As String
Dim NameList(1 To 50) As Variant
Dim i, j, t As Integer
t = 1
For i = 1 To 10
  For j = 1 To 5
    If InStr(nshow, Sheets("Sheet2").Cells(i, j).Value) = 0 Then
        NameList(t) = Sheets("Sheet2").Cells(i, j).Value
        nshow = nshow & i & " " & t & " " & NameList(t) & vbCrLf
        t = t + 1
    End If
  Next j
Next i
MsgBox nshow

答案 1 :(得分:0)

尝试一下:

Sub zxcvb()
    On Error Resume Next
    Dim NameList(1 To 50) As Variant, v As Variant
    Dim i As Integer, j As Integer, t As Integer
    Dim nshow As String, c As Collection
    Set c = New Collection
    t = 1
    For i = 1 To 10
      For j = 1 To 5
        v = Sheets("Sheet2").Cells(i, j).Value
        c.Add v, CStr(v)
        If Err.Number = 0 Then
            NameList(t) = Sheets("Sheet2").Cells(i, j).Value
            nshow = nshow & i & " " & t & " " & NameList(t) & vbCrLf
            t = t + 1
        Else
            Err.Number = 0
        End If
      Next j
    Next i
    MsgBox nshow
End Sub