如何正确格式化这1行Excel VBA代码来过滤掉重复?

我写了一行代码,直到我做了一个小小的调整。 问题是,我不明白为什么我的调整抛出错误:运行时错误1004,这个命令需要至less两行源数据….

工作行代码:

Range("E1", Range("E65536").End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True 

破码:(LastRow是一个长variables)

 Range("E1", Range("E" & LastRow).End(xlUp)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True 

尝试Range("E1", "E" & LastRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True

当你已经引用最后一行时,好像你正在使用.End(xlUp)

我不能为我的生活find评论链接,所以我很抱歉,这不是一个评论。 我相信Excel使用xlUp来查找最后一行数据(而不是获取最后一行数据和最后一行之间的所有空行 – 65536)。 在你的调整中,似乎你已经开始或知道最后一行,所以我不知道你需要使用xlUp。 我想在第二个例子中,你可以取出“.End(xlUp)”。 这会工作吗? 在这种情况下,您也可以缩短对以下内容的引用:

 Range("E1:E" & LastRow).AdvancedFilter... 

让我知道,如果这有助于或如果我误解。

在我生成的伪造的数据集上,我得到了你的代码的两个例子的错误。 当我试图找出select哪个范围时,我发现有时候是一个有用的技巧就是使用activate方法。

尝试这个

 Range("E1", Range("E65536").End(xlUp)).Activate 

看看被选中的是什么 我不知道你的数据是什么样的,我不太清楚你想要select什么范围,但是我估计单元格E65536实际上是空的,所以Range(“E65536”)。End(xlUp )与Range(“E1”)实际上是一样的。End(xlDown)。 由于你的代码正在工作,我假设被选中的将是一个具有多行的范围。

接下来尝试…

 Range("E1", Range("E" & LastRow).End(xlUp)).Activate 

并看看你的工作簿,看看被选中。 我不知道如何在没有看到所有代码的情况下定义LastRow,但我敢打赌,被选中的只是一个单元。 坦率地说,我认为最好的解决scheme(如果你真的想从E1开始,并抓住所有的行,直到他们是空的)是这样做的:

 Range("E1", Range("E1").End(xlDown)).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True 

如果这不是你想要的,可以澄清你想要的范围,也许我们可以给你一些更好的工作。 祝你好运!