Отфильтрованный список отображается на новой вкладке по диапазонам дат - PullRequest
0 голосов
/ 08 октября 2019

Excel давно выходит за рамки моей компетенции, и это кажется очень простым. Ищем формулу для фильтрации списка, но результаты на новой вкладке.

Ближайшая вещь, которую я обнаружил, - это функция FILTER , но когда сайт читает, это новая функция, которая будет выпущена в 2019 году. Поэтому у меня нет доступа к ней, потому что я используюExcel 2013.

Я пытаюсь выполнить фильтрацию по полю диапазонов дат, поэтому все записи текущей недели будут отфильтрованы на новой вкладке.

enter image description here

Таким образом, фильтр с датами на неделю с 6 октября 2019 по 12 октября 2019 года на новой вкладке будет возвращать только 2 верхние строки.

Я пробовал использовать функцию FILTER, нетне работает в MS Excel 2013. Я также рассмотрел VLOOKUP, нет. Я знаю, что PIVOT это не то, что я хочу. Я хочу избежать сценариев VBA, потому что в конечном итоге это пойдет не разработчику.

Наконец, фильтрация текущей таблицы не будет соответствовать моей цели.

Ответы [ 2 ]

3 голосов
/ 08 октября 2019

Advanced Filter будет копировать только на тот же лист.

Для формулы вы можете создать массив соответствующих номеров строк и вернуть их по порядку, используя функцию AGGREGATE, используя *Функция 1005 * и возможность игнорировать ошибки.

Затем используйте это для INDEX в массиве и IFERROR, чтобы позаботиться о перетаскивании формулы вниз на большее количество строк, чем имеется.

Например, используя таблицы и структурированные ссылки: В правой верхней ячейке, где вы хотите результаты:

=IFERROR(INDEX(Table1_2,AGGREGATE(15,6,1/((Table1_2[[Dates]:[Dates]]>=From)*(Table1_2[[Dates]:[Dates]]<=To))*ROW(Table1_2)-ROW(Table1_2[#Headers]),ROWS($1:1)),COLUMNS($A:A)),"")

Заполните вправо и вниз, чтобы заполнить вашу матрицу, и ссылки должны самостоятельно-adjust.

Измените Table на любое имя вашей таблицы или используйте абсолютную адресацию.

enter image description here

enter image description here

1 голос
/ 08 октября 2019

Несколько дорог в Рим здесь, но давайте предположим, что этот пример данных на Sheet1:

enter image description here


Формулы (только пример)

Это мой результат по Sheet2:

enter image description here

Формула вA2:

=IFERROR(INDEX(Sheet1!A$1:A$10,SMALL(IF((Sheet1!$A$2:$A$10>=TODAY()-WEEKDAY(TODAY(),2)+1)*(Sheet1!$A$2:$A$10<=TODAY()-WEEKDAY(TODAY())+7)=1,ROW(Sheet1!$A$2:$A$10),""),ROW(A1))),"")

Примечание: Это формула массива, которую необходимо вводить с помощью Ctrl Shift Введите

Перетащите вниз и вправо


AdvancedFilter (как вы, кажется, заинтересованы в этомвариант тоже)

Просто чтобы добавить эту опцию (хотя и требует некоторого ручного труда)

Если вы настроили свой второй лист так:

enter image description here

Формула в A2:

=">="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")

Формула в A3:

="<="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")

Теперь важно начать AdvancedFilterиз листа, в который вы хотите получить данные. И назначьте соответствующие диапазоны

Результат выглядит так:

enter image description here

Чтобы автоматически обновить AdvancedFilter, вам нужен простой элементVBA, поэтому вставьте следующее как Worksheet_Change() событие в Sheet1:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim rng1 As Range, rng2 As Range
Dim lr1 As Long, lr2 As Long

With Sheet1
    lr1 = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng1 = .Range("A1:C" & lr1)
End With

With Sheet2
    lr2 = .Cells(.Rows.Count, 1).End(xlUp).Row
    If lr2 > 3 Then
        Set rng2 = .Range("A5:C" & lr2)
        rng2.ClearContents
    End If
    rng1.AdvancedFilter xlFilterCopy, .Range("A1:C3"), .Range("A5")
End With

End Sub

Теперь вы сможете добавлять данные в Sheet1, и оно автоматически обновит AdvancedFilter, который будет быстрым. Но если вы хотите держаться подальше от VBA, определенно используйте формулы, предоставленные мной или более эффективным подходом с ListObject от @ RonRosenFeld.


enter image description here

...