繁体   English   中英

比较两个数组并删除相同的值

[英]Compare two arrays and delete identical values

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

我创建了两个数组。 一个是“当前行”(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

运行时错误 13 出现在行:

If Not IsError(WorksheetFunction.Match(ArrAktuelleZeile, ArrDurchlaufZeile, 0)) Then

我尝试了@GTPV 的想法并稍微修改了它以满足我的需要(可变范围和比较第 1-30 列)。

出现语法错误

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

一种可能性是使用 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

可以在 Microsoft 网站上找到有关此功能的其他帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM