2015-09-25 374 views
0

我已經嘗試了多種方法來篩選唯一值的列(包括內部有空格的空格和空格)。我想過濾這些值,然後將它們粘貼到另一個工作表中的列a中。VBA高級篩選唯一值並複製到另一個工作表

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

+1

有時(並不總是)如果沒有選擇要篩選的範圍內發生這個錯誤。嘗試在過濾之前選擇範圍。選擇*不應該被要求,但我看到它有所作爲。 –

+1

如果您想將高級過濾器複製到另一個工作表,我相信您需要使用變量。 – Davesexcel

回答

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 
1

當我跑到你的代碼,並沒有找到什麼工作錯誤在我的結尾。

這是相同的代碼,但使用變量,可能會更好地爲你工作。

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 
+0

看起來這樣會很好用,真的應該自己想想吧!我會在今天晚些時候檢查它,如果我沒有問題,請接受你的答案。歡呼 –

+0

奇怪的是,當我測試這個時,我得到1004'失蹤或非法字段名稱'。我已經運行它與當地人窗口打開,似乎無法看到任何問題 - 任何想法?歡呼 –

+0

讓我們看看你的代碼,我會嘗試並重現這個問題。您可以將其添加到您的原始帖子。 – Davesexcel

相關問題