使用唯一过滤(VBA)时的第一个值两次

时间:2015-08-19 10:57:29

标签: excel vba excel-vba

我制作了一个非常简单的Visual Basic脚本,它使用Excel中的高级过滤功能,将唯一值从一个工作表中的列复制到另一个工作表中的列。它适用于所有值,除了第一个出现两次的值。谁能告诉我这个小故障的原因?我尝试手动使用过滤器,结果相同。

Sub getUniqueRuns()

    Sheets(2).Range("C2:C65536").AdvancedFilter Action:=xlFilterCopy, 
    CopyToRange:=Sheets(5).Range("A2"), Unique:=True

End Sub

2 个答案:

答案 0 :(得分:4)

AdvancedFilter使用范围的顶行作为标题,然后从该范围的其余部分提供distict值。由于您已将第2行作为第一行提供,因此将其用作标题,然后将第3行作为数据。结果你得到重复。我建议您将范围更改为下面的范围,然后将标题复制到其中。

Sub getUniqueRuns()
    Sheets(2).Cells.Clear
    Sheets(2).Range("C1:C65536").AdvancedFilter Action:=xlFilterCopy, 
    CopyToRange:=Sheets(5).Range("A1"), Unique:=True

End Sub

答案 1 :(得分:0)

我的脚本遇到了同样的问题,我使用.offset(1)解决了该问题,以抵消rgData中的多余行。

Sub modHouse_Popularity()
'
' modHouse_Popularity Macro
' Select Houses and remove duplicates

'define range
    Dim rg As Range
    Set rg = ThisWorkbook.Worksheets("Popularity").Range("A2:A500")

 'retain header
    rg.Offset(1).ClearContents
    
'define data fields, criteria fields and out put fields
    Dim rgData As Range, rgCriteria As Range, rgOutput As Range
    Set rgData = ThisWorkbook.Worksheets("Facade requests").Range("Table1[House]").Offset(1)
    Set rgCriteria = ThisWorkbook.Worksheets("Popularity").Range("a2")
    Set rgOutput = ThisWorkbook.Worksheets("Popularity").Range("a3:a500")
'place data

    rgData.AdvancedFilter xlFilterCopy, rgCriteria, rgOutput, True