Несколько дорог в Рим здесь, но давайте предположим, что этот пример данных на Sheet1
:
Формулы (только пример)
Это мой результат по Sheet2
:
Формула в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 (как вы, кажется, заинтересованы в этомвариант тоже)
Просто чтобы добавить эту опцию (хотя и требует некоторого ручного труда)
Если вы настроили свой второй лист так:
Формула в A2
:
=">="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")
Формула в A3
:
="<="&TEXT(TODAY()-WEEKDAY(TODAY(),2)+1,"yyyy/mm/dd")
Теперь важно начать AdvancedFilter
из листа, в который вы хотите получить данные. И назначьте соответствующие диапазоны
Результат выглядит так:
Чтобы автоматически обновить 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.