VBA高级筛选唯一值并复制到另一个工作表

我已经尝试了许多方法来过滤一个列的唯一值(包括内部有空格的空格和空格)。 我想过滤这些值,然后将它们粘贴到另一个工作表中的列a中。

Sub filter_2() With Sheets("ICM flags") .Columns("a").AdvancedFilter Action:=xlFilterCopy, copytorange:=Sheets("Flag Update (2)").Range("a2"), Unique:=True End With End Sub 

上面的方法为.range("a2")但如果我尝试使用.range("a1")我得到运行时错误1004高级filter方法的类失败。

我得到运行时错误1004高级过滤方法的类失败,下面的方法。

 Sub unique_filter() Sheets("ICM flags").Columns("a").AdvancedFilter _ Action:=xlFilterCopy, _ copytorange:=Sheets("Flag Update (2)").Range("a1"), Unique:=True End Sub 

对于上述两种方法,并对Davesexcel进行编辑的答案:

 Sub AdvFilter() Dim ws As Worksheet, sh As Worksheet Dim rng As Range, Frng As Range Set sh = Sheets("ICM Flags") Set Frng = sh.Range("A:A") Set ws = Sheets("Flag Update (2)") Set rng = ws.Range("A1") 'Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True Frng.AdvancedFilter Action:=xlFilterInPlace, Unique:=True End Sub 

该方法适用于FilterInPlace但不适CopyToRange

当我运行你的代码时,它在我的一端没有任何错误。

这是相同的代码,但使用variables,可能会更好地为您工作。

 Sub AdvFilter() Dim ws As Worksheet, sh As Worksheet Dim rng As Range, Frng As Range Set ws = Sheets("Flag Update (2)") Set rng = ws.Range("A1") Set sh = Sheets("ICM flags") Set Frng = sh.Range("A:A") Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True End Sub 

似乎问题是由于尝试使用CopyToRange复制到另一个工作表造成的。 我已经解决了这个问题,首先复制到相同的工作表,然后将这些值复制到我希望他们的工作表

 Sub AdvFilter() 'filters flags copied from ICM to unique values and pastes into Flag update sheet. Dim ws As Worksheet, sh As Worksheet Dim rng As Range, Frng As Range, Prng As Range Set ws = Sheets("Flag Update (2)") Set sh = Sheets("ICM Flags 1")'destination sheet Set Frng = sh.Range("A:A")'filter range Set rng = sh.Range("c1")'filter output range Frng.AdvancedFilter Action:=xlFilterCopy, copytorange:=rng, Unique:=True ws.Columns("a").Value = sh.Columns("c").Value 'Separate copying as the filter didn't like copying to another sheet End Sub