VBA 高级过滤唯一值并复制到另一张纸

问题描述 投票:0回答:5

我尝试了多种方法来过滤列中的唯一值(包括空格和内部带有空格的空格)。我想过滤这些值,然后将它们粘贴到另一张纸的 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

对于上述两种方法以及对 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

vba excel filter unique
5个回答
3
投票

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

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

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

1
投票

其实 目标需要成为活动工作表,然后您可以从任何其他工作表或工作簿获取唯一值


0
投票

问题似乎是由于尝试使用

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

0
投票

这是我独特的过滤器上使用的东西。它将从

sheet1
复制并粘贴到
sheet2

Private Sub CommandButton2_Click()
    Dim UserRange As Range
    Sheets("Sheet2").Range("A:A").Clear
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Sheet1")
    On Error Resume Next
    Set UserRange = Application.Range("A:A")
    On Error GoTo 0
    If UserRange Is Nothing Then
        Exit Sub
    End If     
    UserRange.AdvancedFilter _
        xlFilterCopy, CopyToRange:=Sheets("BOM").Range("A1"), Unique:=True
End Sub

0
投票
Sheets("ÈíÇäÇÊ ÇáãæÙÝíä").Range("B4:J14").AdvancedFilter Action:=xlFilterCopy _
    , CriteriaRange:=Range("Sheet1!Criteria"), CopyToRange:=Range( _
    "Sheet1!Extract"), Unique:=False
ActiveWindow.SmallScroll Down:=-9

结束子

© www.soinside.com 2019 - 2024. All rights reserved.