从范围中删除重复总是留下1个空白单元格

作为一个更大的macros的一部分,我试图复制范围从一张纸到另一张纸,删除重复,并设置剩余的唯一值作为范围。 我已经写了下面的原则,但删除重复和设置其余单元格作为范围后,范围内的最后一个单元格总是空白的。 我怎么能忽略这个空白单元格,所以我的范围是在独特的价值?

lr = Data.Cells(Rows.Count, "B").End(xlUp).Row Data.Range("B5:B" & lr).Copy Sheets("Index").Range("B1") Sheets("Index").Range("B1:B10000").Copy Sheets("Index").Range("B1").PasteSpecial xlPasteValues Sheets("Index").Range("B1:B10000").RemoveDuplicates Columns:=1, Header:=xlNo Application.CutCopyMode = False lr = Sheets("Index").Cells(Rows.Count, "B").End(xlUp).Row Set MCH = Sheets("Index").Range("B1:B" & lr) 

仅供参考我正在复制粘贴值与范围的原因是因为它复制一个“帮手”列结合了2个名字,我的macros没有这样做的工作。 如果有一个更有效的方法,我全是耳朵。

正如Gary的学生所指出的那样,在硬编码范围"B1:B10000"将会出现一行空白。

尝试再次使用您的最后一行逻辑来调整10000 – 我觉得你从B5粘贴,你可以调整从lr(lr+4)

 lr = Data.Cells(Rows.Count, "B").End(Excel.xlUp).Row Data.Range("B5:B" & lr).Copy Sheets("Index").Range("B1") Sheets("Index").Range("B1:B" & (lr+4)).Copy Sheets("Index").Range("B1").PasteSpecial Excel.xlPasteValues Sheets("Index").Range("B1:B" & (lr+4)).RemoveDuplicates Columns:=1, Header:=Excel.xlNo Excel.Application.CutCopyMode = False lr = Sheets("Index").Cells(Rows.Count, "B").End(Excel.xlUp).Row Set MCH = Sheets("Index").Range("B1:B" & lr) 

一个非常不同,但更漂亮的方法是使用这样一个数组和集合:

 Sub unique() Dim arr As New Collection, a Dim aFirstArray() As Variant Dim i As Long Dim Data as Excel.worksheet Set Data = Thisworkbook.sheets("Data") lr = Data.Cells(Rows.Count, 2).End(Excel.xlUp).Row aFirstArray() = Data.Range("B5:B" & lr) On Error Resume Next For Each a In aFirstArray arr.Add a, a Next For i = 1 To arr.Count Sheets("Index").Cells(i, 2) = arr(i) Next End Sub 

数组速度非常快 – 我想这也是更快。

我希望这第二个scipt是​​我原来的一段代码,但它是一个适应。 参考:
vba:从数组中获取唯一值

如果在删除重复项之前,列中的单元格包含空值 , 那么至less有一个包含Null的单元格将在删除重复项后出现在列中。

之后您可以删除Null