尝试根据第一列删除重复项

时间:2018-06-11 02:26:48

标签: excel vba

我目前正在尝试根据A列中的重复项删除A列到第V列的行。

我目前的公式是:

Workbooks(TgtWB).ActiveSheet.Range("A15:V500").RemoveDuplicates _
    Columns:=Array(1), Header:=xlYes

我的标题位于第15行。

我得到的错误是

  

应用程序定义或对象定义的错误

我尝试用ActiveSheet切换worksheet("xxx"),但似乎仍无法正常工作。我不确定我在这里做错了什么。

2 个答案:

答案 0 :(得分:2)

尝试(请注意工作表 S ,而不是工作表),

Workbooks(TgtWB).worksheetS("xxx").Range("A15:V500").RemoveDuplicates Columns:=1, Header:=xlYes
'or,
ActiveSheet.Range("A15:V500").RemoveDuplicates Columns:=1, Header:=xlYes

如果TgtWB已打开,则可能包含也可能不包含ActiveSheet。每个打开的工作簿都没有ActiveSheet。应用程序实例只有一个ActiveSheet。 ActiveSheet不是Workbooks集合的属性。

答案 1 :(得分:0)

使用内置功能非常棒,除非您是像我一样的初学者,.Applications.Worksheets会让人感到压力和困惑。对于一个小的数据集,例如A到V列(显然取决于你有多少行),循环和if语句不仅可以很好地工作,而且也可以是很好的实践!这样的事情可能效果很好:

Dim CurrentValue, LastValue As Variant
   LastValue = ""
   For I = 1 To 500
       CurrentValue = Sheets("Sheet 1").Range("A" & i).Value
       If CurrentValue = LastValue Then
           Sheets("Sheet 1").Range("A" & i & ":V" & i).Clear Contents
       Else
           LastValue = CurrentValue
       End If
   Next i

这将循环遍历每一行,询问单元格中的当前值是否与先前观察到的相同(第一个除外,第一个将自动保存),如果已经存在,则将清除行的内容。如果它不相同,它会将它分配给新变量并开始寻找新变量。

这种方法有两个缺点,可以通过简单地根据需要调整代码来解决:

  1. 非顺序项:如果重复的值不是连续的,则代码不会将它们踢出去。那时我建议使用应用程序代码或字典。字典对于存储唯一数据条目和跳过重复项非常有用。
  2. 删除行:当您在循环中删除行时,会弄乱您的循环,从而丢弃增量器的顺序。解决这个问题的最佳方法是首先清除列,然后让代码循环为空行并删除它们之外的循环。
  3. 这是非常基本的,但我发现作为初学者非常有帮助,希望其他初学者和你自己可以从中学到一些东西。

    快乐编码!