Первое значение дважды при использовании уникальной фильтрации (VBA)

Я сделал очень простой сценарий Visual Basic, который использует функцию расширенного фильтра в Excel для копирования уникальных значений из столбца на одном листе в столбец на другом листе. Он отлично работает со всеми значениями, кроме первого, которое появляется дважды. Может кто подскажет причину этого глюка? Я попытался использовать фильтр вручную, с тем же результатом.

Sub getUniqueRuns()

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

End Sub

person Jakob Busk Sørensen    schedule 19.08.2015    source источник


Ответы (2)


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
person Phil192    schedule 19.08.2015
comment
Sheets(2).Range(C1) содержит заголовок столбца (строка). Такой же заголовок находится в Sheets(5).Range(A1). Если я попытаюсь включить их, как это сделали вы, я получу ошибку выполнения 1004: диапазон извлечения имеет отсутствующее или недопустимое имя поля. - person Jakob Busk Sørensen; 19.08.2015
comment
Я заставил это работать, очистив лист, на который я копирую. Возможно, вы могли бы добавить это к своему ответу, если у других людей была такая же проблема. Тем не менее, это был правильный ответ, так что спасибо :-) - person Jakob Busk Sørensen; 19.08.2015
comment
Добавлены Листы(2).Ячейки.Очистить. :-) - person Phil192; 19.08.2015

У меня была такая же проблема с моим скриптом, я решил ее с помощью .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
person David Little    schedule 30.09.2020