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

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

我有一个三列表,其中第一列包含公司名称(B列),第二名董事姓名(C列),第三名董事ID(D列)和所有公司名单(F列)。 一家公司有多个不同的董事,因此在B栏中,公司名称的重复次数与公司中的许多董事相同。 一些公司可以共享相同的导演,以便在C和D列中存在名称和ID的重复。 但是,根据这些数据,一个公司内有些名字会被重复多次(有点冗余信息)。

这是我的表的一个例子

在这里输入图像说明

所以我的目标是删除(删除)这个多余的信息,即删除一个特定公司的董事重复,同时保留这些重复是由于几家公司共享一个或多个董事的事实造成的。 从技术上讲,我需要select对应某个公司的董事和他们的ID的范围,然后通过ID删除重复。 然后重复每个公司。 由于我有500家公司,我想以某种方式自动化

这里是我在VBA中创build的代码(删除重复函数+ 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 

这个代码的问题是,如果我运行它没有循环(对于一个特定的公司),它运作良好。 但是,只要我添加循环它第一步工作良好,但随后它开始删除整个列D内的所有副本,但不在公司名称范围内。

你能帮我一下吗? 如何改善呢?

如果解决scheme是创build一个唯一值的新列,我只是在这里回答了一个类似的问题: 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))