如何使用FOR循环正确删除重复项

时间:2013-12-02 20:00:03

标签: excel vba excel-vba

我的问题似乎太容易了,但遗憾的是我只是VBA的初学者。

我有一个包含三列的表,其中1st包含公司名称(B列),第二个包含公司名称(C列),第3个 - 董事ID(D列)和所有公司列表(F列)。一家公司有许多不同的董事,因此在B栏中,公司名称与该公司的多名董事一样多次重复。有些公司可以共享同一个导向器,因此在C列和D列中有重复的名称和ID。但是,根据数据,一些公司在一家公司内重复了一些名称(有点多余的信息)。

这是我的表格的一个例子

enter image description here

所以我的目标是删除(删除)这个多余的信息,即删除特定公司的Director副本,同时保留由于多家公司共享一个或多个导演而导致的重复项。从技术上讲,我需要选择与某个公司相对应的董事范围及其ID,然后按ID删除重复项。然后为每个公司重复一遍。由于我有500家公司,我想以某种方式自动化它

这是我在VBA中构建的代码(删除重复功能+ for循环):

Sub test()

    Dim rcompany As Variant
    For X = 0 To 500
    rcompany = Range("F2").Offset(X, 0)

    Dim c As Range, r As Range


    For Each c In Range("B1:B23500")
        If c.Value = rcompany Then
            If r Is Nothing Then
                Set r = c.Offset
                      Else
                Set r = Union(r, c)
            End If
        End If

    Next c
    Union(r, r.Offset(, 1), r.Offset(, 2)).RemoveDuplicates Columns:=3, Header:=xlNo

    Next
End Sub

这段代码的问题在于,如果我在没有循环的情况下运行它(对于特定公司),它运行良好。但是,只要我添加for循环,它就可以很好地完成第一步,但之后它会开始删除整个D列中的所有重复项,但不会根据公司名称删除范围。

你可以帮帮我吗?如何改进?

1 个答案:

答案 0 :(得分:0)

如果解决方案是要创建一个新的唯一值列,我在这里只回答了类似的问题:https://stackoverflow.com/questions/20337742/name-manager-in-excel/20344038#20344038

它的要点:

假设您的名称列表(包含重复项)在A列中,而您的唯一值列表在B列(B1是标题)。

B2等于A2。 B3及以后使用这个公式:

  =INDEX(A$2:A$20,MATCH(TRUE,ISNA(MATCH(A$2:A$20,B$2:B2,0)),0))