匹配2个数组

时间:2018-11-13 12:40:24

标签: arrays excel vba excel-vba

我的总体目标是从工作表中删除所有相同的行。

因此,我创建了两个数组。一个是“当前行”(1),第二个数组是用另一行重新填充的。到目前为止有效。

现在我要匹配两个数组,如果它们相同,则应删除相应的行。

然后,“当前行”更改为2。

我现在的代码是:

For j = 1 To VarAnzahlZeilen
    i = 1
    For i = 1 To VarAnzahlSpalten
        ReDim Preserve ArrAktuelleZeile(i - 1) As String
        ArrAktuelleZeile(i - 1) = Worksheets("Filter").Cells(j, i).Value
    Next i

       (i+1)
        For n = j + 1 To VarAnzahlZeilen
            k = 1
                For k = 1 To VarAnzahlSpalten
                     ReDim Preserve ArrDurchlaufZeile(k) As String
                     ArrDurchlaufZeile(k - 1) = Worksheets("Filter").Cells(n, k).Value
                Next k

                    If Not IsError(WorksheetFunction.Match(ArrAktuelleZeile, ArrDurchlaufZeile, 0)) Then
                        Rows(n).Delete
                    End If
        Next n
Next j

RuntimeError 13出现在以下行:

  

如果不是IsError(WorksheetFunction.Match(ArrAktuelleZeile,ArrDurchlaufZeile,0))然后

我想整体代码可以改进^^

可以帮忙吗?


首先,非常感谢所有正在提供帮助的人。

我尝试了@GTPV的想法,并对其进行了少许修改以满足我的需要(可变范围并比较1-30列)。 不幸的是出现了Syntaxerror

 Worksheets("Filter").Range(.Cells(1, 1), .Cells(VarAnzahlZeilen, VarNutzerSpalte))).RemoveDuplicates Columns:=Array(1, 2, 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30), Header _
    :=xlNo

1 个答案:

答案 0 :(得分:1)

一种可能性是使用Excel中的内置功能来删除重复项:

 Worksheets("Filter").Range("$A$1:$C$10").RemoveDuplicates Columns:=Array(1, 3), Header _
    :=xlNo

上面的示例将删除A1:C10范围内的所有重复项,其中重复项意味着“ A列中的值相同而C列中的值相同”。最后一个参数由“ Columns:= Array(1,3)”参数控制。

仅基于列A仅获取唯一值将被编码为:

 Worksheets("Filter").Range("$A$1:$C$10").RemoveDuplicates Columns:=Array(1), Header _
    :=xlNo

基于所有列的组合获取唯一值:

 Worksheets("Filter").Range("$A$1:$C$10").RemoveDuplicates Columns:=Array(1,2,3), Header _
    :=xlNo

有关该功能的其他帮助,请参见on Microsoft website.