Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays VBA数组单元格值复制问题_Arrays_Excel_Vba - Fatal编程技术网

Arrays VBA数组单元格值复制问题

Arrays VBA数组单元格值复制问题,arrays,excel,vba,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 & " " &

我为同样的问题挣扎了好几个星期。我想现在是时候在网络上成为专业人士了:

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
这是将以下所有数据放入arraysee图片中的代码:

跑步后,我会得到以下信息:

我想我在数组中得到了以下单元格值: 名称列表A 8、k 2、u 2、e 2、o 2等

我的问题是如何清理数组,使它们的重复值不超过1个相同的值。我想要 名称列表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无重复数据


我很感激你的帮助

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

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
尝试一下:

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

查看Dictionary对象。将每个值作为一个键添加到字典中,但前提是该键不存在。最后,简单地在键上循环。使用类似的方法时,不要一次读/写一个单元格。使用x=RangeA1.Resize100,10.Value语法。您可能不知道这一点,但在您的代码中,变量txt、i和j都被声明为Variant类型。是的,我知道,但谢谢。我在这里的意图是给@Tarik一个简单的答案来回答他的具体问题。不要说变体速度较慢,如何以正确的方式声明变量等等。这里不重要。