Excel VB Расширенный фильтр Копировать с условием - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь поставить условие для каждой скопированной строки.Я хочу все уникальные, но только если они также имеют определенное значение в другом поле.

Это то, что я должен захватить все уникальные (и это работает), но я не могу понять, как получить только строкис определенным значением в столбце J.

r1.Columns(20).AdvancedFilter xlFilterCopy, , Sheet11.Range("A1"), unique:=True

Я пытался сделать CriteriaRange, но мне не удается получить правильный синтаксис для него.Кроме того, я подумал об операторе If, но логически, в моей голове, это означает, что он будет запускать весь список каждый раз, когда у него есть истинное утверждение, а не для каждой строки.

Вот как я думал, что это может работать,Но я получаю ошибку несоответствия типов.

r1.Columns(20).AdvancedFilter xlFilterCopy, r1.Columns(10).Value = "November", Sheet11.Range("A1"), unique:=True

Мысли?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Чтобы иметь возможность сохранить другие части кода, которые работали отлично.Я добавил скрытый лист и написал макрос, чтобы скопировать отфильтрованные результаты на новый скрытый лист.Затем я применил свой исходный код к отфильтрованным данным на этом скрытом листе.

Sub FilterLiveToDataSheet()
' Unhide Required Sheets
    Sheets("Original-Data").Visible = True
    Sheets("Filtered-Data").Visible = True

' Delete Old Data
    Sheets("Filtered-Data").Select
    Cells.Select
    Selection.ClearContents

' Copy Filtered Data
    Sheets("Original-Data").Select
    Range("TBL_ATTR_Spend[[#Headers],[HeaderName]]").Select
    Selection.AutoFilter
    ActiveSheet.ListObjects("TBL_ATTR_Spend").Range.AutoFilter Field:=10, _
        Criteria1:="Delta"
    Cells.Select
    Selection.Copy

' Paste to Data Sheet
    Sheets("Filtered-Data").Select
    Cells.Select
    ActiveSheet.Paste

' Unfilter Original Data Page
    Sheets("Original-Data").Select
    Range("TBL_ATTR_Spend[[#Headers],[HeaderName]]").Select
    Selection.AutoFilter

' Hide Required Sheets
    Sheets("Original-Data").Visible = False
    Sheets("Filtered-Data").Visible = False

' Go to Results Sheet
    Sheets("Results").Select
0 голосов
/ 01 октября 2018

Прежде всего, ваш диапазон критериев должен быть именно таким - Range с заголовком, соответствующим фильтруемому столбцу, и критериями под ним.Например, D1:D2 в этом снимке:

enter image description here

Во-вторых, вы не сможете скопировать только один столбец (20)при фильтрации другого столбца (10) на том же шаге.

Вы можете настроить расширенный фильтр на

  • Сначала отфильтруйте весь список на основе предоставленного критерия
  • А затем скопируйте видимые ячейки в рассматриваемом столбце

Примерно так (при необходимости измените ссылки Sheet и Range):

Sub MyFilter()
    Dim lastRow As Long

    With Sheet1
        lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row

        .Range("A1:B" & lastRow).AdvancedFilter _
            Action:=xlFilterInPlace, CriteriaRange:=.Range("D1:D2"), Unique:=True

        With .Range("B1:B" & lastRow).SpecialCells(xlCellTypeVisible)
            .Copy Sheet2.Range("A1")
        End With

        .ShowAllData
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...