VBA高级筛选唯一值并复制到其他工作表

VBA高级筛选唯一值并复制到其他工作表,vba,excel,filter,unique,Vba,Excel,Filter,Unique,我尝试了很多方法来过滤列中的唯一值(包括空格和空格)。我想过滤这些值,然后将它们粘贴到另一张图纸的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 上面的方法

我尝试了很多方法来过滤列中的唯一值(包括空格和空格)。我想过滤这些值,然后将它们粘贴到另一张图纸的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类的高级筛选方法失败

我得到运行时错误1004类的高级筛选器方法失败,方法如下

Sub unique_filter()

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

End Sub
对于上述两种方法以及对DaveExcel答案的编辑:

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

当我运行您的代码时,它工作正常,没有任何错误

这是相同的代码,但使用变量,可能对您更合适

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

当我运行你的代码时,它在我这方面没有错误

这是相同的代码,但使用变量,可能对您更合适

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

问题似乎是由于试图使用
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
实际上 需要将目标设置为活动工作表,然后您可以从任何其他工作表或工作簿中获取唯一值
需要将目标设置为活动工作表,然后您可以从任何其他工作表或工作簿中获取唯一值

如果未选择要筛选的范围,有时(并非总是)会发生此错误。尝试在筛选之前选择范围。不需要选择,但我已经看到了它的作用。我认为如果要将高级筛选复制到另一个工作表,则需要使用变量。如果未选择要筛选的范围,有时(并非总是)会发生此错误。尝试在筛选之前选择范围。选择不应该是必需的,但我已经看到了它的不同之处。我相信如果你想将高级过滤器复制到另一个工作表,你需要使用变量。看起来这样会很好,我真的应该自己考虑一下!今天晚些时候我会检查一下,如果没有问题,我会接受你的回答。干杯,当我测试这个时,我得到1004“缺少或非法字段名”。我在本地人窗口打开的情况下运行它,似乎看不到任何问题-有什么想法吗?请看您的代码,我将尝试复制该问题。您可以将其添加到原始帖子中。啊,这是一个好主意,但不幸的是,在本例中,我已手动从InfoWorks ICM导出a列数据,并将其粘贴到.xlsm中,以便在其上使用筛选代码。我写的所有代码都是在过滤步骤之后完成的,我目前正在手动绕过过滤步骤来完成我的工作。那么为什么不使用代码将列复制到另一个工作表中,然后删除重复项呢?看起来这样做会很好,我真的应该自己考虑一下!今天晚些时候我会检查一下,如果没有问题,我会接受你的回答。干杯,当我测试这个时,我得到1004“缺少或非法字段名”。我在本地人窗口打开的情况下运行它,似乎看不到任何问题-有什么想法吗?请看您的代码,我将尝试复制该问题。您可以将其添加到原始帖子中。啊,这是一个好主意,但不幸的是,在本例中,我已手动从InfoWorks ICM导出a列数据,并将其粘贴到.xlsm中,以便在其上使用筛选代码。我写的所有代码都是在筛选步骤之后完成的,我目前正在手动绕过该步骤来完成我的工作。那么为什么不使用代码将列复制到另一个工作表中,然后删除重复项呢。